字符串$title只能是小写字母数字或符号"-“。
在这种情况下,以下哪种方法是有效防御安全漏洞的方法?
$title=$_GET["title"];
$title = strtolower(preg_replace("/[^a-z0-9\-]+/i", "-", $title));
< mysql query using $title goes here >或
$title=$_GET["title"];
$title = mysql_real_escape_string($title);
< mysql query using $title goes here >发布于 2011-08-03 20:07:35
你应该同时做这两件事。
$title = strtolower(preg_replace("/[^a-z0-9\-]+/i", "-", $title));
And then $title = mysql_real_escape_string($title);对MySQL值进行转义总是一个很好的做法,在这种情况下,转义它是没有用的,但是如果将来标题的规则发生了变化,并且您可以放入任何字符,那么您可能会忘记更改它
发布于 2011-08-03 20:05:46
永远不要使用您自己的转义方法来转义SQL查询;数据库服务器会做得更好。
回答这个问题:regexp通常非常慢。我想函数调用会快得多。
此外,永远不要依赖用户的输入。
发布于 2011-08-03 20:06:43
我将使用mysql_real_escape_string,这将消除大部分mysql注入问题。如果标题不存在(例如,因为有人正在尝试执行mysql注入),那么将找不到任何行,因此,您将显示404错误
https://stackoverflow.com/questions/6926153
复制相似问题