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

2022-08-30 21:59:58

我正在尝试将一个通用函数放在一起,该函数将清理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;
    }
}

如果我理解了.这由 php 服务器设置为自动转义字符,而不需要使用 。get_magic_quotes_qpc()addslashes()

我是否一起使用并正确地一起使用,还有其他可以添加的内容来增加消毒。addslashes()mysql_real_escape_string()

谢谢


答案 1

htmlentities() 对于 SQL 来说是不必要的, 以使数据安全。在将数据值回显到 HTML 输出时使用它,以避免 XSS 漏洞。这也是您需要注意的重要安全问题,但它与SQL无关。

addslashes() 对于mysql_real_escape_string是多余的。最终,数据库中的字符串中将出现文字反斜杠。

不要使用魔术引号。此功能已被弃用多年。不要将 PHP 代码部署到启用了魔术引号的环境中。如果已启用,请将其关闭。如果这是一个托管环境,并且他们不会关闭魔术报价,请获取新的托管服务提供商。

不要使用 .它不支持查询参数、事务或 OO 用法。ext/mysql

更新:在 PHP 5.5.0 (2013-06-20) 中已弃用,在 PHP 7.0.0 (2015-12-03) 中已删除。你真的不能使用它。ext/mysql

使用 PDO,并使用准备好的查询使查询更安全。

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


答案 2

魔术引号已弃用。如果可以:),请将其关闭。

第二部分,做了几乎相同(相似)的事情。试试吧addslashesmysql_real_escape_String

addslashes( '\\')
// and
mysql_real_escape_string( '\\')

如果您使用\\

 mysql_real_escape_string( addslashes( '\\'))

你应该得到(或作为字符串)。仅使用(更好的)OR,切勿同时使用两者。\\'\\\\'mysql_real_escape_stringaddslashes

我建议使用PDO而不是原始函数和手动转义。


推荐