Php 用于清理Mysql数据库输入的函数
我试图将一个通用函数放在一起,它将清理Mysql数据库的输入。到目前为止,这就是我所拥有的:Php 用于清理Mysql数据库输入的函数,php,mysql,sql-injection,sanitization,Php,Mysql,Sql Injection,Sanitization,我试图将一个通用函数放在一起,它将清理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
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;
}
}
如果我理解了get\u magic\u quotes\u qpc()
的定义。php服务器将其设置为自动转义字符,而无需使用addslashes()
我是否正确地同时使用了addslashes()
和mysql\u real\u escape\u string()
,还有什么我可以添加的来增加消毒效果的吗
谢谢为什么要在将数据保存到数据库之前应用htmlentities?如果您想将数据用于其他用途,而不仅仅是将其写入浏览器,该怎么办?例如,用于搜索、分区数据、使用其他编程语言中的数据等 你唯一真正想应用的是mysql\u real\u escape\u string(或use),而不是别的 我通常更喜欢完全撤销魔法引号的效果,总是这样。魔术语录的使用很麻烦,不应该被发明出来。下面是一段来自的代码片段,用于反转神奇的引号:
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
神奇的引语是。如果可以,请关闭它们:)
第二部分addslashes
和mysql\u real\u escape\u String
做了几乎相同(类似)的事情。试试看
addslashes( '\\')
// and
mysql_real_escape_string( '\\')
结果应该是\
,所以如果您使用
mysql_real_escape_string( addslashes( '\\'))
您应该获得\\
(或'\\\\'
作为字符串)。仅使用mysql\u real\u escape\u string(更好)或addslashes
,切勿同时使用
我建议使用,而不是原始函数和手动转义 使用:
mysql_real_escape_string()
这将防止错误数据,如DROP TABLE;) htmlentities()对于确保SQL数据安全是不必要的。它用于将数据值回显到HTML输出,以避免XSS漏洞。这也是一个需要注意的重要安全问题,但它与SQL无关
addslashes()与mysql\u real\u escape\u字符串是冗余的。您将在数据库中的字符串中使用文字反斜杠
不要使用神奇的引号。此功能已被弃用多年。不要将PHP代码部署到启用了magic quotes的环境中。如果已启用,请将其关闭。如果这是一个托管环境,并且他们不会关闭magic quotes,那么就找一个新的托管提供商
不要使用ext/mysql
。它不支持查询参数、事务或OO使用
更新:ext/mysql
在PHP5.5.0(2013-06-20)中被弃用,在PHP7.0.0(2015-12-03)中被删除。你真的不能用它
使用,并通过使用使查询更安全
有关编写安全SQL的更多详细信息,请阅读我的演示文稿。最糟糕的部分是添加斜杠并不能净化任何东西,无论使用了什么函数。
它不应该被用于任何“消毒”的手段 斜杠不会“清理”数据。斜杠仅转义字符串分隔符。因此,你能说的唯一的消毒方法就是逃避和引用
否则,如果您不在“净化”字符串周围加引号,您将完全没有保护。组合尽可能多的转义函数不是一个好方法。您将得到三重转义数据,并且只能在html输出中使用它。mysql\u real\u escape\u string()不“防止坏数据”。但无论如何,您不能将此查询注入与mysql扩展一起使用