2

我目前正在努力制作我的网站注入证明,并且想知道我正在做的验证,我的代码如下所示:

if(!empty($_POST['city']) && !empty($_POST['street'])){
  $city = htmlentities(mysql_real_escape_string($_POST['city']));
  $street = htmlentities(mysql_real_escape_string($_POST['street']));   
}

我的问题不是空支票本身就是一个漏洞吗?我的意思是我是否也必须在 !empty 验证中转义字符串?或者保持这种方式是安全的?谢谢。

4

2 回答 2

2

对于 SQL 注入,您只需要在查询数据库时担心,因此 isset 是安全的。

应该不需要htmlentities(将其用作针对 XSS 的保护)。

mysql_real_escape_string如果正确完成,将防止 SQL 注入,但根本不应该使用,因为 mysql_ 前缀 / DB-handler 已过时,不推荐使用,根本不应该使用。最安全的方法是使用mysqli_PDO,并使用准备好的语句。

于 2013-07-26T11:48:55.440 回答
2

SQL 注入漏洞的工作原理如下:

$username = $_GET["username"];

mysql_query("SELECT 1 FROM `users` WHERE `username` = '" . $username . "'");

现在,如果值$_GET["username"]类似于"foo' OR 1=1--"

查询:

SELECT 1 FROM `users` WHERE `username` = 'foo' OR 1=1
--'

将运行选择所有用户

如果您转义输入,您将获得(预期的)查询:

SELECT 1 FROM `users` WHERE `username` = 'foo\' OR 1=1--'

PHP 函数本身并不容易受到攻击。


也许这是一个很好的类比:当有人说“说出你的名字”时,他们希望你说“我是约翰”而不是“你的名字”

于 2013-07-26T11:49:12.793 回答