通过限制字符来防止SQL注入

时间:2015-07-22 06:16:15

标签: mysql sql sql-injection

可以说通过限制此符号,我们限制SQL注入。

  1. '(报价)
  2. "(双引号)
  3. ;(分号)
  4. 因为据我所知,大多数SQL注入都是通过在开头加上引号或双引号来关闭输入,然后用分号关闭句子。

    请帮助我,如果它是真的。如果不是真的,请提供一个例子,说明如何不使用这些字符注入是可能的。

3 个答案:

答案 0 :(得分:2)

使用PDO可以防止SQL注入。你必须逃避输入并消毒它。 例如,您有查询:

Select col1 from table where id=$input_from_user

现在查看用户输入是12还是1 == 1,并在查询中直接输出。查询将始终返回结果。

PDO可以防止此类攻击。

答案 1 :(得分:1)

我喜欢这个,它通过你的支票滑过:

?id=13 UNION SELECT 1,user(),3,4,5,6,7

为什么要打扰<FORM>,只需将其插入网址即可。

答案 2 :(得分:1)

我不知道mysql的语法,这就是为什么我给出了基于sqlserver的例子,所以不要为此给出减号。

是的,这样就足够了,但仍有一些其他保留的工作会导致问题,如&#39;&amp;&#39;,&#39;&lt;&#39;&#39;&gt;& #39;用于xml字段或xml操作。

当我们使用内联查询时,Sql注入工作(因此总是使用过程来避免sql注入)

Declare @var1 nvarchar(100) = 'column 1 like ''' + 'abc' + '%' -- suppose this will also pass from your c# or vb.net or java code as ("column1 like 'abc'")

Declare @strsql nvarchar(500) 
@strsql = 'Select * from table where ' + @var1

exec @strsql 

如果你给sql注入值,因为上面的值将返回一切,即使用户没有权限:1 = 1 -

Declare @strsql nvarchar(500) 
@strsql = 'Select * from table where 1=1--' 

exec @strsql -- the sql injection will remove your all succeeding value