什么是SQL注入?

时间:2010-02-07 05:55:51

标签: sql sql-injection

  

可能重复:
  XKCD sql injection - please explain
  What is SQL injection?

我看过“SQL注入”一词,但仍然不理解。它是什么?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:1)

SQL注入是攻击者能够操纵他们发送给你的数据的方式,这种方式会欺骗你的程序将其中一些用作SQL命令。

例如,您可以访问here

alt text

答案 2 :(得分:1)

当您构建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表的所有记录。避免这种情况的标准方法是在构建包含用户提供的部分的查询时始终使用预准备语句。