如何防止SQL Azure中的ASP.NET SQL注入

时间:2014-08-28 22:16:29

标签: c# sql asp.net sql-server azure

我有兴趣以最安全的方式在ASP.NET网站表单和SQL Azure数据库之间创建连接。表单只是一个需要将记录插入数据库表的联系表单。 根据我到目前为止收集的内容,实现此目的的最安全方法是在数据库中创建单独的登录名或单独的用户,并授予用户INSERT ONLY对包含table的模式的权限。我目前有一个asp.net网站,并成功将应用程序插入到所需的表中,azure帐户的连接参数是主要级别登录的连接参数。仅为应用程序创建不同的用户/登录并保存SQL Server Management Studio的主要登录是否有意义? 我已经读过,避免SQL注入威胁的常用方法之一是在数据库中有一个存储过程。然而,在我看来,一个聪明的想法只是创造一个有限的用户。开发人员在后端采用哪些最安全的方法,如SQL Azure(与角色,用户和登录相关),以保护网站免受入侵者的侵害,以及app.config字符串数据是否受到攻击?

我目前正在使用ASP.NET,SQL Azure和C#。我只使用一个控件,它是asp.net Web表单的联系控件。控件放在多个页面中,后面有c#代码。希望这可以帮助。先感谢您。

1 个答案:

答案 0 :(得分:0)

使用ORM(例如Entity Framework或NHibernate)是防止sql注入的标准方法:它处理正确的参数编码。

另一种方法是使用sql command parameters,如果您更喜欢避免使用ORM并使用简单的ADO.net访问:这也会对插入进行编码。

限制用户权限通常很有用,但不够以防止注入(因为您仍然可以注入字符串来插入垃圾数据)。

E.g。以这种方式构建查询:

var query = "INSERT INTO dbo.USERS(Name) values ('" + userNameFromForm + "')";

我可以通过发送以下用户名来解决此问题:John') insert into dbo.USERS(Name) values ('rubbish这将导致执行以下查询:

INSERT INTO dbo.USERS(Name) values ('John') insert into dbo.USERS(Name) values ('rubbish')