使用存储过程可以防止 SQL 注入/XSXX 攻击吗?

Posted

技术标签:

【中文标题】使用存储过程可以防止 SQL 注入/XSXX 攻击吗?【英文标题】:Does using stored procedures prevent SQL Injection/XSXX Attacks? 【发布时间】:2016-10-15 21:51:37 【问题描述】:

我正在 ASP.NET MVC C# 上开发一个 SaaS 应用程序,我很好奇使用存储过程/函数是否可以防止 SQL 注入和 xsxx 攻击?我想对用户输入的数据进行某种清理,但我不知道他们这样做的最佳方法是什么。

如果我需要进行一些数据清理,最好的方法是什么?

【问题讨论】:

【参考方案1】:

您应该通过使用SqlCommand 并将适当的参数添加到适当的连接来使用参数化查询。这将防止 SQL 注入。您不能保证所有途径都会受到保护,例如,如果您使用来自用户字符串的 sp_executesql

SQL 注入和 XSS 攻击是不同的问题。

【讨论】:

所以我不需要做任何正面擦洗?只要我使用参数和适当的存储过程,我就不会受到 sql 注入的保护? 是的,但它不能解决 XSS,这完全是一个单独的问题。【参考方案2】:

视情况而定

    SQL 注入:避免在存储过程中使用动态 SQL,因为它容易受到攻击,并且可以使用 SQL 注入攻击来滥用,如果不可避免,请使用 sp_executesql(如 Daniel 的回答中所述) Better Way

    XSS:对于旧版本的 MVC(aspx 视图引擎),始终使用 <%: ... %>,这与 html.Encode() 相同。对于 @Razor 视图,@model.something 始终默认情况下自动编码,除非您专门使用 HTML.Raw 。 Nice Read

【讨论】:

以上是关于使用存储过程可以防止 SQL 注入/XSXX 攻击吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止sql注入攻击?

ASP.NET如何防止SQL注入

如何防止web攻击

MyBatis怎么防止SQL注入

mybatis模糊查询防止SQL注入

如何实现php的安全最大化?怎样避免sql注入漏洞和xss跨站脚本攻击漏洞