清理ASP.NET MVC应用程序中的输入

SB2*_*055 6 asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 knockout.js

我有一个带有服务层的MVC应用程序,我正在试图弄清楚如何消毒所有输入而不会疯狂.

我在控制下进行验证 - 在客户端和模型(EF5)上处理字段长度,数据类型和其他验证.

我现在要处理的是阻止SQL注入和XSS - 我能够通过将一些标记粘贴到我的输入中来破坏我的应用程序.

例如:

 <textarea data-bind="value: aboutMe">@Model.AboutMe </textarea>
Run Code Online (Sandbox Code Playgroud)

如果我在AboutMe中保存一些脚本标记:

<script type="text/javascript">alert("hey")</script>
Run Code Online (Sandbox Code Playgroud)

由于非法字符导致页面中断:

  Uncaught SyntaxError: Unexpected token ILLEGAL 
Run Code Online (Sandbox Code Playgroud)

我想我可以挑选每一个输入并将其包装在某种SanitizeText()函数中,该函数从已提交的任何内容中删除所有括号,但这感觉便宜又乏味,并且不能解决SQL注入问题.

什么是正确的方法来解决这个问题?

gee*_*ubb 6

为了解决XSS等问题,您应该使用Html编码对输出进行正确编码-而不是输入。您可能还想看看anti-xss库http://wpl.codeplex.com/releases/view/80289,其中包括一些非常有用的类。

为了解决与SQL注入有关的问题,您应该使用SQL参数(参数化查询)http://msdn.microsoft.com/zh-cn/library/vstudio/bb738521(v = vs.100).aspx,并在其中配置适当的权限SQL Server本身。我相信,当您使用EF5时,这也可以防止SQL注入。