如果过滤括号和分号,则进行SQL注入

时间:2013-02-25 15:16:08

标签: sql sql-server sql-injection

我有这样的陈述:

SELECT * FROM TABLE WHERE COLUMN = 123456

123456由用户提供,因此它容易受到SQLi的攻击,但如果我删除所有分号和括号,黑客是否可以运行任何其他语句(如DROP,UPDATE,INSERT等),除了{ {1}}?

我已经在使用预处理语句,但我很好奇,如果输入被删除了行终止符和括号,黑客能否以任何方式修改数据库?

2 个答案:

答案 0 :(得分:7)

使用sql参数。试图“消毒”输入是一个非常坏主意。尝试谷歌搜索一些复杂的SQL注入片段,你不会相信黑帽子的黑客是多么有创意。

答案 1 :(得分:1)

一般来说,通过尝试删除特定字符来100%确定您是否可以避免此类攻击是非常困难的 - 有太多方法可以绕过您的代码(通过使用字符编码等)< / p>

更好的选择是将参数传递给存储过程,如下所示:

CREATE PROCEDURE usp_MyStoredProcedure
    @MyParam  int
AS

BEGIN
    SELECT * FROM TABLE WHERE COLUMN = @MyParam

END
GO

这样,SQL会将传入的值视为参数,而不管其包含的内容。在这种情况下,它只会接受int类型的值。

如果您不想或不能使用存储过程,那么我建议您更改代码,以便输入参数只能包含预定义的字符列表 - 在本例中为数字字符。这样你可以确定该值是安全的。