crm*_*ham 13 php mysql sanitization sql-injection
我试图将一个通用功能放在一起,以清理对Mysql数据库的输入.到目前为止,这就是我所拥有的:
function sanitize($input){
if(get_magic_quotes_qpc($input)){
$input = trim($input); // get rid of white space left and right
$input = htmlentities($input); // convert symbols to html entities
return $input;
} else {
$input = htmlentities($input); // convert symbols to html entities
$input = addslashes($input); // server doesn't add slashes, so we will add them to escape ',",\,NULL
$input = mysql_real_escape_string($input); // escapes \x00, \n, \r, \, ', " and \x1a
return $input;
}
}
Run Code Online (Sandbox Code Playgroud)
如果我理解的定义get_magic_quotes_qpc().这是由php服务器设置为自动转义字符而不是需要使用addslashes().
我是否正确地使用过addslashes()并且mysql_real_escape_string()还有其他任何我可以添加以增加消毒效果的东西.
谢谢
Bil*_*win 28
htmlentities()对于使SQL数据安全是不必要的.它在将数据值回显到HTML输出时使用,以避免XSS漏洞.这也是一个需要注意的重要安全问题,但它与SQL无关.
addslashes()与mysql_real_escape_string是多余的.您最终会在数据库中的字符串中使用文字反斜杠.
不要使用魔法引号.此功能已被弃用多年.不要将PHP代码部署到启用了魔术引号的环境中.如果已启用,请将其关闭.如果它是托管环境并且他们不会关闭魔术引号,请获得新的托管服务提供商.
不要用ext/mysql.它不支持查询参数,事务或OO使用.
有关编写安全SQL的更多详细信息,请阅读我的演示文稿SQL注入神话和谬误.
魔术报价已被弃用.如果你能:)关掉它们.
第二部分addslashes和mysql_real_escape_String几乎相同(相似)的事情.试一试
addslashes( '\\')
// and
mysql_real_escape_string( '\\')
Run Code Online (Sandbox Code Playgroud)
\\如果您使用,结果应该是这样
mysql_real_escape_string( addslashes( '\\'))
Run Code Online (Sandbox Code Playgroud)
你应该得到\\(或'\\\\'作为字符串).仅使用mysql_real_escape_string(更好)或者addslashes,不使用两者.
我建议使用PDO而不是原始函数和手动转义.