7

我有一个带有服务层的 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 注入问题。

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

4

2 回答 2

7

要解决 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 注入。

于 2013-11-02T22:16:05.387 回答
0

如果你的意思是清理用户不允许导入 html 标签,我不得不说 asp .net 默认情况下会这样做,除非你想对 XSS 有一定的安全性。但是如果你的意思是表单验证这个是由@Html.AntiForgeryToken()控制的

于 2021-12-28T19:23:06.010 回答