SQL查询作为参数发送的危险



基本问题。如果我有一个表单,询问用户的姓名、电子邮件和评论,并且我将条目存储在数据库中。。。如果有人键入SQL查询,例如:,会发生什么

DROP tablename

在评论部分。

@Name,
@Email,
@Comments
INSERT INTO mytable (Name, Email, Comments) VALUES (@Name, @Email, @Comments)

是否存在SQL注入的风险,或者我是否完全安全?

SQL Server 2008用于处理插入的存储过程。

是的,你很安全。

SQL注入的工作原理是通过插入恶意输入来更改SQL查询的语法

但是一个查询参数总是替换一个标量值。如果使用参数,任何恶意输入都无法更改查询的语法。

您可以使用参数对象。它可以限制SQL注入。不要使用内联SQL。如果使用SQL内联,请检查参数中的单引号("'")。

问题的简短答案是——如果使用参数,则是安全的。

(下面的评论有点超出了你最初的问题范围,但我强烈建议你花点时间了解更多关于这个主题的信息)

然而,这并不意味着您不应该以任何方式验证用户输入。即使您可以安全地避免SQL注入,但验证用户输入的失败可能会导致您的数据被人们插入的任何内容弄脏。

此外,请确保您使用的帐户权限最少,以进一步提高安全性。

这里有一篇来自MSDN的关于这个主题的好文章。

最新更新