为了防止来自XSS或任何其他攻击的Web应用程序输入,我们想要解码来自客户端(浏览器)的所有输入。
为了绕过标准验证,坏人编码数据。示例:
<IMG SRC=javascript:alert('XSS')>
转换为
<IMG SRC=javascript:alert('XSS')>
在C#中,我们可以使用HttpUtility.HtmlDecode&amp; HttpUtility.UrlDecode解码客户端输入。但是,它并未涵盖所有类型的编码。例如,使用上述方法不会转换以下编码值。但是,所有浏览器都会正确解码并执行它们。也可以在https://mothereff.in/html-entities验证它们。
<img src=x onerror="javascript:alert('XSS')">
它被解码为<img src=x onerror="javascript:alert('XSS')">
还有一些编码文本无法使用HtmlDecode方法解码。在Java中,https://github.com/unbescape/unbescape处理所有这些变种。
我们在.Net中有类似的库或者如何处理这样的场景?
答案 0 :(得分:0)
通常,您不应允许用户在文本框中输入代码。
客户端
根据您对帖子的评论,我只需添加一些客户端验证,以防止用户添加任何类型的恶意输入(例如验证电子邮件字段包含电子邮件),然后添加相同的验证技术你的服务器。
服务器端
只要您在模型中阅读用户的输入,就应该在进行任何进一步处理之前对其进行验证和消毒。有一个通用的AntiXSS()
类,可以通过检查<>
或myString.Contains("<")
来删除myString.Contains(">")
符号等任何恶意字符。如果是,请删除该字符。验证您的类型。如果您要检查userEmail
字段,请确保其符合电子邮件语法。
一般的想法是,您可以将数据传递给客户端,但绝不会信任从客户端返回的任何数据,而无需先清理和清理所有内容。
答案 1 :(得分:0)
我找到了解决方案。 HtmlUtility.HtmlDecode对&符号&amp;&amp;&#39;之间的字符进行解码。和分号&#39 ;;&#39;。但是,浏览器并不打扰后缀&#39 ;;&#39;。
就我而言,分号&#39 ;;&#39;失踪。我编写了简单的代码来在调用HtmlDecode方法之前插入分号。现在,它按预期正确解码。