【发布时间】:2011-07-05 13:52:36
【问题描述】:
有很多关于 addlashes 和 mysql_real_escape 函数如何不安全地防止注入的讨论。事实上,即使是像 Wordpress 这样的大型框架或 CMS 也在使用这些功能,而且到目前为止它们做得非常好。
我知道在使用GBK字符集时有一些特殊的场景,或者utf8_decode可以用来注入一些sql代码,或者一些简单的例子比如1' OR 1 --可以在涉及到简单的地方时使用。
但是,经过一番研究,如果字符集是 UTF-8,则似乎很难将某些内容注入到使用 addlashes 或 mysql_real_escape 的简单查询中,让我们承认,这是最常见的情况。
所以,鉴于这个新手脚本,请提供一个 sql 注入 POC(记住 UTF-8 字符集)
$mysql['username'] = addslashes($_POST['username']);
$mysql['password'] = addslashes($_POST['password']);
$sql = "SELECT *
FROM users
WHERE username = '{$mysql['username']}'
AND password = '{$mysql['password']}'";
更新 - 我只需要一个简单的示例,而不是完整披露该过程。即使是来自谷歌的链接也可能有效。
【问题讨论】:
-
2 个书签和 2 个关闭投票?有什么原因吗?
-
好问题,但我想知道的是:为什么 不 简单地使用
mysql_real_escape_string如果甚至有一个遥远的理论可能性addslashes不够好(更不用说准备好的陈述等)? -
我告诉过你,对于此类问题,这是完全错误的网站。不开玩笑。那是因为大多数人从不考虑问题(更不用说问题背后的问题),而是倾向于发布他们认为与问题相关的某种知识。看,这家伙问了类似的问题,但没有得到很好的答案:stackoverflow.com/questions/3448441 但是,它也包含对您问题的某种答案
-
我明白你的意见,弹片上校,但上次你给了我正确的答案:)
-
哈哈,就像我说的!这家伙因为他无用的咆哮而获得了赏金:)
标签: php sql code-injection