用于清理Mysql数据库输入的函数

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使用.

使用PDO,使用准备好的查询使您的查询更安全.

有关编写安全SQL的更多详细信息,请阅读我的演示文稿SQL注入神话和谬误.


Vyk*_*tor 5

魔术报价已被弃用.如果你能:)关掉它们.

第二部分addslashesmysql_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而不是原始函数和手动转义.