gpt4 book ai didi

php - 防止sql注入(inject)的函数

转载 作者:行者123 更新时间:2023-11-29 08:12:56 25 4
gpt4 key购买 nike

假设开发人员在mysql中不使用prepared statements,那么以下三个函数足以防止任何SQL注入(inject)。如果有人改进以下功能,我将不胜感激:

function SanitizeForSQL($str)
{
if( function_exists( "mysql_real_escape_string" ) )
{
$ret_str = mysql_real_escape_string( $str );
}
else
{
$ret_str = addslashes( $str );
}
return $ret_str;
}

/*
Sanitize() function removes any potential threat from the
data submitted. Prevents email injections or any other hacker attempts.
if $remove_nl is true, newline chracters are removed from the input.
*/
function Sanitize($str,$remove_nl=true)
{
$str = $this->StripSlashes($str);

if($remove_nl)
{
$injections = array('/(\n+)/i',
'/(\r+)/i',
'/(\t+)/i',
'/(%0A+)/i',
'/(%0D+)/i',
'/(%08+)/i',
'/(%09+)/i'
);
$str = preg_replace($injections,'',$str);
}

return $str;
}
function StripSlashes($str)
{
if(get_magic_quotes_gpc())
{
$str = stripslashes($str);
}
return $str;
}

编辑:从专家的回复来看,上面的代码似乎是一坨屎。所以我将使用准备好的语句。我感谢大家,这让我大开眼界。

最佳答案

改进代码的唯一方法就是完全废弃它。

除了错误之外,如果您存储多字节字符串,您还会引入与字符集相关的错误,并且您的转义函数必须能够识别字符集,mysql扩展名和 gpc 引用并弃用,并以渡渡鸟的方式前进。两者都不要使用。

使用pdo来代替,或者如果你已经使用了mysql,则使用mysqli。无论哪种情况,都使用参数化查询——也称为准备好的语句。

就此而言,您还可以使用成熟且经过彻底测试的 ORM。有许多。这个 ORM 将为您处理 SQL,因此您可以担心实际编写应用程序而不是您自己的框架。

关于php - 防止sql注入(inject)的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21214981/

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