我有一个带有服务层的MVC应用程序,我正在试图弄清楚如何清理所有输入而不会疯狂。
我正在控制验证 - 在客户端和模型(EF5)上正在处理字段长度,数据类型和其他验证。
我现在要处理的是阻止SQL注入和XSS - 我能够通过将一些标记粘贴到我的输入中来破坏我的应用程序。
例如:
<textarea data-bind="value: aboutMe">@Model.AboutMe </textarea>
如果我在AboutMe中保存了一些脚本标记:
<script type="text/javascript">alert("hey")</script>
由于非法字符导致页面中断:
Uncaught SyntaxError: Unexpected token ILLEGAL
我想我可以挑选每一个输入并将其包装在某种类型的SanitizeText()函数中,该函数从已提交的任何内容中删除所有括号,但这感觉便宜又乏味,并且不能解决SQL问题注射。
正确的方法是什么?
答案 0 :(得分:4)
要解决XSS等问题,您应该使用例如正确编码输出。 Html编码 - 与您的输入相反。您可能还想查看反xss库http://wpl.codeplex.com/releases/view/80289,其中包含一些优秀的类来提供帮助。
要解决SQL注入问题,您应该使用SQL参数(参数化查询)http://msdn.microsoft.com/en-us/library/vstudio/bb738521(v=vs.100).aspx以及SQL服务器本身配置的适当权限。在您使用EF5时,我相信这也可以防止SQL注入。