限制分号以防止SQL注入?

asm*_*smo 9 t-sql security sql-injection

我已经看到SQL注入字符串通常是这样构造的:

' ; DROP DATABASE db  --
Run Code Online (Sandbox Code Playgroud)

因此,如果我不允许在我的应用程序输入中使用分号,这是否100%防止任何SQL注入攻击?

Ode*_*ded 10

使用参数化查询(或存储过程)并避免像瘟疫一样的动态SQL.

我建议使用内置的库函数,而不是尝试编写自己的反注入代码.

;即使应该使用(例如,作为VARCHAR或CHAR参数传递的一部分,它是合法的),一个天真的实现将被剥离.您最终必须编写自己的SQL解析器才能接受/拒绝查询.

您可以在此处阅读有关动态SQL及其呈现(和解决)的问题的更多信息.


Ral*_*ton 9

不,它不会阻止SQL注入攻击.无论何时在客户端动态构建SQL,或者在存储过程中使用EXEC,都存在风险.

参数化查询是获取查询输入的首选方法.


Gum*_*mbo 5

不,它没有\xe2\x80\x99t。您刚刚展示了一个 SQL 注入示例。但还有更多,一切都取决于您插入数据的上下文。

\n\n

除此之外,它\xe2\x80\x99不是导致此问题的分号,而是\'提前结束字符串声明的分号。正确编码您的输入数据以防止 SQL 注入

\n