您好,我正在使用一个数据集,在该数据集中我有一个表适配器。在我的表适配器中,我使用存储过程作为查询。如果我使用以下行通过表适配器插入表单数据,是否可以安全地防止 SQL 注入?谢谢。
UserDataSetTableAdapters.UserInformationTableAdapter myFactory = new TestProject.UserDataSetTableAdapters.UserInformationTableAdapter();
myFactory.spTest_InsertUserInformation(id, frmAddress);
如果不发布您的存储过程代码,就无法真正回答您的问题,但您可能可以自己回答。
SQL 注入攻击源于用户输入的数据进入动态生成和执行的 SQL 查询。使用存储过程通常通过将参数作为参数传递来避免此问题,从而不会动态生成 SQL。过程会自动封装,不会成为原始 SQL 查询文本的一部分。
以下面为例:
SELECT *
FROM myTable
WHERE myId = @ID;
作为参数,您可以安全地设置@ID
到“21;删除表 myTable;”。它将为您转义,并且整个字符串将与 myId 进行比较。但是,如果您动态生成 SQL 查询,例如
string query = "SELECT *\nFROM myTable\nWHERE myId = " + userEnteredText + ";";
现在你会得到以下内容:
SELECT *
FROM myTable
WHERE myId = 21; DROP TABLE myTable;;
Ouch.
因此,回答您的问题:如果您的存储过程没有根据其参数动态生成 SQL,并且EXEC
他们,你应该是安全的。
注意:当然,这依赖于您的 .NET 数据提供程序使用参数调用过程而不生成动态 SQL 语句。大多数人都能正确执行此操作,但如果您使用第三方提供商,则应在确保安全之前仔细检查这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)