我能得到一个如何进行SQL注入的例子吗?

时间:2011-10-27 04:23:13

标签: php sql security code-injection

我是PHP新手,即将推出。我正在使用mysql_real_escape_string();对于所有用户输入以及所有$ _GET和$ _REQUEST变量。我想测试它但不确定它是如何完成的,所以我可以阻止它并采取适当的措施。

3 个答案:

答案 0 :(得分:4)

尝试在所有表单字段(包括隐藏字段)中输入类似于下面的字符串:

blah'"blah

如果您没有正确转义它,您将收到sql错误。如果你得到那个sql错误,那么你应该能够弄清楚如何编写一个与原始版本不同的查询。

答案 1 :(得分:3)

  

我正在使用mysql_real_escape_string();对于所有用户输入和所有$ _GET和$ _REQUEST变量

好吧,你完全错了。

首先,mysql_real_escape_string()与“用户输入”无关。这是与数据库相关的功能,与用户无关 接下来,它与“所有输入”无关,因为它的使用仅限于字符串。所以,如果你有这样的代码

$id = mysql_real_escape_string($_GET['id']);
$sql = "SELECT * FROM table WHERE id=$id";

你在这里逃避绝对没用并且什么都不保护。

至于测试 - 这有点棘手。但是,互联网上有工具,我相信你可以谷歌一些。

答案 2 :(得分:-1)

SQL注入是指用户尝试操作SQL查询的预期结果。维基百科以及所有Intro to Databases课程中引用的一种方法是,当攻击者通过放置';";后跟另一个SQL命令来“伪造”SQL命令的结尾。

$_POST['InjectedString'] = "John Doe'; drop table `users`;";

如果没有消毒,这有可能丢弃你的users表。

有关SQL注入的更详细说明,请访问the Wikipedia page

要获得一些喜剧效果,请查看this XKCD comic

这只是尝试SQL注入的一种方法,仅用作教学工具,因为根据Rook的说法,它在MySQL中不能很好地工作。