【发布时间】:2011-01-14 00:55:54
【问题描述】:
【问题讨论】:
-
强制 xkcd 链接:xkcd.com/327
-
很多很多 SO 问题的重复,包括:stackoverflow.com/questions/332365/…
标签: sql sql-injection
【问题讨论】:
标签: sql sql-injection
SQL 注入是攻击者能够以一种欺骗您的程序将其中一些数据用作 SQL 命令的方式操纵他们发送给您的数据的地方。
例如,您可以访问here
【讨论】:
当您构建 SQL 查询时,它通常包含各种位和片段,其中一些来自用户输入。例如,如果您的应用中有“搜索图书”功能,那么图书的名称就是来自用户的字符串。
聪明、邪恶的用户可以操纵他们发送到您的应用程序的输入,从而使根据该输入构建的 SQL 查询是有害的。
因此,如果您像这样构建查询:
String q = "Select * from books where name='" + bookName + "'"
然后黑客可以搜索一本名为"x'; delete from books where name like '%"的书
最终结果将是执行以下查询:
Select * from books where name='x'; delete from books where name like '%'
这将删除 book 表的所有记录。避免这种情况的标准方法是在构建包含用户提供的片段的查询时始终使用准备好的语句。
【讨论】:
SQL 注入是指有人将恶意内容插入您的 SQL 查询之一。
假设您有这样的 SQL 查询:
select * from people where name = '<name>' and password = '<password>'
现在让我们假设<name> 和<password> 被某人在您的网页上键入的内容所取代。如果有人输入这个作为他们的密码...
' or '' = '
...那么结果查询将是:
select * from people where name = 'someone' and password = '' or '' = ''
...这显然不是你的意图。你可以阅读更多关于它的信息here。
【讨论】: