PHP
PHP:
$SQL = "SELECT goodies FROM stash WHERE secret='" . str_replace("'",'',$_POST['secret']) . "'";
一个邪恶的天才黑客可以将SQL注入到我的SELECT中 - 如何?
我已经想了一会儿,我看不出有什么办法可以将SQL注入到这个语句中。
以单引号开头的SQL字符串在下一个单引号处终止,除非使用反斜线或其他引号( '
或''
)进行转义。 由于您要删除所有单引号,因此不能有加倍的引号。 如果你逃避了结束语,你会得到一个错误,但没有SQL注入。
但是这种方法有许多缺点:
例如:
$SQL = "SELECT goodies FROM stash WHERE secret='" .
str_replace("'",'',$_POST['secret']) .
"' AND secret2 = '" .
str_replace("'",'',$_POST['secret2']) .
"'";
当用参数和
OR 1 = 1 --
调用时OR 1 = 1 --
会导致:
SELECT goodies FROM stash WHERE secret='' AND secret2=' OR 1 = 1 -- '
哪个MySQL会看到如下所示的内容:
SELECT goodies FROM stash WHERE secret='...' OR 1 = 1
即使在这种情况下不可能导致注入,这些缺点也不适合用于避免SQL注入的通用方法。
正如已经指出的那样,解决方案是使用准备好的语句。 这是防止SQL注入攻击的最可靠的方法。
为什么不使用mysql_real_escape_string()或更好的语句? 你的解决方案看起来很傻。
也许。 最好的方法是:
$query = sprintf("SELECT goodies FROM stash WHERE secret='%s'",
addcslashes(mysql_real_escape_string($_POST['secret']),'%_'));
链接地址: http://www.djcxy.com/p/93685.html
上一篇: php
下一篇: PHP: Is mysql