2011-01-13 93 views
0

我想阻止用户使用非常相似的代码这个进入一个文本框我呼吁故事内的任何<script>标签:脚本标记的ASP.NET MVC验证

if (ArticleToCreate.story.Contains("<script>") == true) 
       ModelState.AddModelError("Story", "No script tags allowed!"); 

不幸的是,这将不起作用因为它正在寻找<script>,而不是寻找<script>some code</script>或者某些代码。“

任何人都可以帮忙吗? 我想使用与上面所示非常相似的代码,而不是任何服务层或模型脚本。谢谢

+3

一般而言,尝试使用自己的滚动解决方案来应对XSS攻击几乎不是一个好主意。一个简单的解决方案就是对所有用户输入进行HTML编码(无论如何你都应该这样做,Razor会自动为你做)。 – 2011-01-13 18:49:14

回答

0

你可以使用html编码来获得你要找的东西,像这样。

<%:model.story%> < ---------这将帮助你,即时通讯假设你正在使用asp.net MVC 2如果没有可以使用这样的事情:

<%= Html.Encode(Model.story)%> < -----这是为asp.net mvc,但这是服务器端验证,你可以随时添加你自己的客户端验证。

3

默认情况下,MVC不会允许这样做。如果您明确允许(例如使用[ValidateInput(false)]),则需要使用类似Microsoft Web Protection Library的工具来清理输入。

1

如果您需要允许用户输入一些HTML而不是任何HTML,我建议您调查Microsoft Web Protection Library,其中包括使用户输入的HTML片段“安全”的方法。

我同意Matt Greer的说法,试图创建自己的识别非法标签的解决方案是一个坏主意。有太多的攻击媒介将脚本注入到HTML中,您将无法防范所有这些攻击。 (请参阅此XSS Cheat Sheet进行抽样,但已过时,因此可能会有更多。)