Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC应用程序中的清理输入_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4_Knockout.js - Fatal编程技术网

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

ASP.NET MVC应用程序中的清理输入,asp.net,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,knockout.js,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> 我想我可以挑选每一个输入,并将其封装在某种SanitizeText()函数中

我有一个带有服务层的MVC应用程序,我正试图找出如何在不发疯的情况下清理所有输入

我已经控制了验证——字段长度、数据类型和其他验证都在客户机和模型(EF5)上处理

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

例如:

 <textarea data-bind="value: aboutMe">@Model.AboutMe </textarea>
我想我可以挑选每一个输入,并将其封装在某种SanitizeText()函数中,该函数可以删除所有已提交内容的方括号,但这感觉既便宜又乏味,而且不能解决SQL注入问题


正确的方法是什么

要解决XSS等问题,您应该使用Html编码等方式对输出进行正确编码,而不是输入。您可能还想看看anti-xss库,其中包含一些非常有用的类


为了解决SQL注入的问题,您应该使用SQL参数(参数化查询)以及在SQL server本身中配置的适当权限。因为您使用的是EF5,所以我相信这也可以防止SQL注入。

不幸的是,AntiXSS库在这一点上已经损坏了;版本4.2删除了几乎所有的东西…@Tieson-你说的“删除”是什么意思。如果你使用编码方法,它不应该剥离任何东西。它将对其进行适当的编码,以使XSS无效。如果您有时间,可以在此处发布更详细的问题:如果您使用
getSafeThmlFragment
方法,它将从输入字符串中删除所有漂亮的内容-如果您试图清理(比如)所见即所得编辑器中的输入,那么这并不完全有用。不过我想这可能符合OP的要求。我想他不想把编码的括号留在里面。非常确定所有ASP.NETRazor视图默认都是HTML编码的。除非您显式调用
@Html.Raw
,否则您应该是OK的。我已经使用了这个NuGet包并获得了很好的结果:@TiesonT。-谢谢,我现在就试试。我还用一个例子更新了我的问题,以防它有助于了解我在处理什么。这是Html的简写。Encode@geedubb我使用@-这与是的不一样吗,对不起,我相信razor语法会为您编码
<script type="text/javascript">alert("hey")</script>
  Uncaught SyntaxError: Unexpected token ILLEGAL