使用存储过程可以防止 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 攻击吗?的主要内容,如果未能解决你的问题,请参考以下文章