C# 如何在SQL Azure中防止ASP.NET SQL注入

C# 如何在SQL Azure中防止ASP.NET SQL注入,c#,sql,asp.net,sql-server,azure,C#,Sql,Asp.net,Sql Server,Azure,我对以最安全的方式在ASP.NET网站表单和SQL Azure数据库之间创建连接感兴趣。该表单只是一个需要将记录插入数据库表的联系人表单。 从我到目前为止收集的信息来看,实现这一点的最安全的方法是在数据库中创建一个单独的登录名和/或一个单独的用户,并授予用户对包含to表的模式的INSERT ONLY权限。我目前有一个asp.net网站,并成功地让应用程序将数据插入到所需的表中,azure帐户的连接参数为原则级别登录的参数。仅仅为应用程序创建一个不同的用户/登录名,并保存SQL Server Ma

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

我目前正在使用ASP.NET、SQL Azure和C。我只使用一个控件,即ASP.NET web表单的联系人控件。该控件被放在多个页面中,后面有c代码。希望这有帮助。先谢谢你

使用实体框架或NHibernate是防止sql注入的标准方法:它处理正确的参数编码

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

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

例如,通过以下方式构建查询:

var query = "INSERT INTO dbo.USERS(Name) values ('" + userNameFromForm + "')";
我可以通过发送以下用户名来攻击此问题:John'insert into dbo.USERSName values'垃圾,这将导致执行以下查询:

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

只需使用参数而不是动态构建SQL语句,就可以防止SQL注入。它与用户安全无关。事实上,预防非常简单。避免SQL注入威胁的方法是不允许SQL注入。不要连接字符串以生成SQL语句。工作完成了。也许使用ORM?我想到了实体框架。我也读过@JohnSaunders,但是,让应用程序登录而不是将原则级别的登录数据存储在应用程序配置文件中难道没有意义吗?@user3256123:你现在问的是一个非常不同的问题。这与Sql注入没有多大关系。。。关于保护数据库和限制危害(如果发生)的最佳实践,还有更多内容。连接字符串可以在配置文件中加密。同样,这与SQL注入无关。谢谢。你提出了一个很好的观点。传递参数对于防止sql注入是必要的,但不足以防止泄露。你能给我推荐一本详细介绍其他威胁的书吗@isantipov@ExcelApplications,我没有一本关于sql安全性的书,但这里有一个关于前10个web安全问题的系列文章