gpt4 book ai didi

php - codeigniter 如何清理输入?

转载 作者:可可西里 更新时间:2023-10-31 22:12:31 24 4
gpt4 key购买 nike

我正在构建一个 Codeigniter 应用程序,我正在尽最大努力防止 SQL 注入(inject)。我正在使用 Active Record 方法来构建我所有的查询。我知道 Active Record 会自动清理输入,但我想知 Prop 体到什么程度?它是简单地转义所有引号,还是做更多的事情?如何防止混淆的 SQL 注入(inject)或其他更高级的类型?

基本上,我正在寻找有关 CI 如何清理数据的深入解释。有人知道吗?

最佳答案

完全像这样(对于 MySQL 驱动程序):

  • 尝试 mysql_real_escape_string()(99% 的情况都是如此)
  • 回退到 mysql_escape_string()
  • 退回到addslashes()
  • 通过 str_replace()LIKE 条件下手动转义 %_

https://github.com/EllisLab/CodeIgniter/blob/develop/system/database/drivers/mysql/mysql_driver.php#L294

/**
* Escape String
*
* @access public
* @param string
* @param bool whether or not the string will be used in a LIKE condition
* @return string
*/
function escape_str($str, $like = FALSE)
{
if (is_array($str))
{
foreach ($str as $key => $val)
{
$str[$key] = $this->escape_str($val, $like);
}

return $str;
}

if (function_exists('mysql_real_escape_string') AND is_resource($this->conn_id))
{
$str = mysql_real_escape_string($str, $this->conn_id);
}
elseif (function_exists('mysql_escape_string'))
{
$str = mysql_escape_string($str);
}
else
{
$str = addslashes($str);
}

// escape LIKE condition wildcards
if ($like === TRUE)
{
$str = str_replace(array('%', '_'), array('\\%', '\\_'), $str);
}

return $str;
}

请注意,这只是转义字符,因此 MySQL 查询不会中断或执行意外操作,并且仅在数据库查询的上下文中使用,以确保基于您传递给它的内容的语法正确。

没有魔法可以使所有数据在任何上下文(如 HTML、CSV 或 XML 输出)下都是安全的,以防万一您正在考虑它:xss_clean() 不是一刀切的解决方案,也不是 100% 防弹的,有时它实际上是非常不合适的。 Active Record 类会自动转义查询,但对于其他所有内容,您应该针对给定的上下文以正确的方式手动转义/清理数据,使用您的输出,而不是您的输入 .

关于php - codeigniter 如何清理输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com