Vb.net 调用存储过程的Web服务需要多少清理?

Vb.net 调用存储过程的Web服务需要多少清理?,vb.net,escaping,sql-injection,Vb.net,Escaping,Sql Injection,我正在用VB.Net构建一系列web服务 每个web服务都接受多个字符串值,执行一些验证/处理,然后使用Linq to SQL调用一个存储过程。某些字符串包含存储在数据库中的用户数据: 这些从web服务传递的字符串值被转义以捕获单引号字符、分号和各种括号类型 我正在使用datacontext.spnameparameter1、parameter2方法调用SP 其目的是确保web服务在保持性能的同时尽可能具有弹性 我在防止SQL注入攻击方面做得够多了吗?通常您都很好,但有几个注意事项: 小心使用s

我正在用VB.Net构建一系列web服务

每个web服务都接受多个字符串值,执行一些验证/处理,然后使用Linq to SQL调用一个存储过程。某些字符串包含存储在数据库中的用户数据:

这些从web服务传递的字符串值被转义以捕获单引号字符、分号和各种括号类型

我正在使用datacontext.spnameparameter1、parameter2方法调用SP

其目的是确保web服务在保持性能的同时尽可能具有弹性


我在防止SQL注入攻击方面做得够多了吗?

通常您都很好,但有几个注意事项:

小心使用sp_executesql或exec的存储过程。您可以在param中传入查询并最终执行它

小心处理查询的类似部分,因为如果将它们与参数相比较,它们可以用%加宽

网页中使用的字段在发送之前可能需要一些额外的处理,以避免跨站点脚本。在提取信息时,您还应该对此进行防御


通常你很好,但有几个警告:

小心使用sp_executesql或exec的存储过程。您可以在param中传入查询并最终执行它

小心处理查询的类似部分,因为如果将它们与参数相比较,它们可以用%加宽

网页中使用的字段在发送之前可能需要一些额外的处理,以避免跨站点脚本。在提取信息时,您还应该对此进行防御


我知道一个事实,LINQtoSQL查询通过SQL参数发送到数据库的所有数据,这可以防止SQL注入。我不完全确定,但由于LINQ抽象了存储过程,它也很可能以相同的方式将参数传递给存储过程


这是什么意思?您不必担心清理数据,因为LINQ会处理它。当然,您可以通过一个简单的SQL注入类型攻击来测试它—类似无害的插入或选择。

我知道一个事实,LINQ to SQL查询通过SQL参数发送到数据库的所有数据—这使您免受SQL注入的影响。我不完全确定,但由于LINQ抽象了存储过程,它也很可能以相同的方式将参数传递给存储过程


这是什么意思?您不必担心清理数据,因为LINQ会处理它。当然,您可以使用一个简单的SQL注入类型攻击来测试它—比如无害的插入或选择。

如果您使用的是参数,那么您根本不需要进行清理,因为单引号和其他SQL注入缺陷会为您逃脱

根据存储的数据对输入进行消毒可能不是个好主意。如果您正在存储最终嵌入到网页中的内容,并在数据输入时对其进行编码/消毒,那么如果您的卫生代码有错误,会发生什么情况?数据库中的数据最终会导致输出出现问题,如果不更新所有数据,就无法轻松解决问题。最好在输出数据时进行消毒,因为对卫生代码的更正将针对所有数据运行。您还有一个优点,就是在SQL中搜索更容易,这是一个值得关注的问题


我会将web服务限制为明显的内容,空值和范围检查

如果您使用的是参数,那么您根本不需要进行清理,因为单引号和其他sql注入缺陷会为您转义

根据存储的数据对输入进行消毒可能不是个好主意。如果您正在存储最终嵌入到网页中的内容,并在数据输入时对其进行编码/消毒,那么如果您的卫生代码有错误,会发生什么情况?数据库中的数据最终会导致输出出现问题,如果不更新所有数据,就无法轻松解决问题。最好在输出数据时进行消毒,因为对卫生代码的更正将针对所有数据运行。您还有一个优点,就是在SQL中搜索更容易,这是一个值得关注的问题

我会将web服务限制为明显的内容,空值和范围检查