繁体   English   中英

在C#中解封客户端数据以防止XSS或其他攻击

[英]Unescapping client data in C# to prevent XSS or other attack

为了防止Web应用程序输入受到XSS或任何其他攻击的影响,我们希望对来自客户端(浏览器)的所有输入进行解码。

为了绕过标准验证,坏蛋对数据进行编码。 例:

<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>

那被翻译成

<IMG SRC=javascript:alert('XSS')>

在C#中,我们可以使用HttpUtility.HtmlDecode和HttpUtility.UrlDecode解码客户端输入。 但是,它并不涵盖所有编码类型。 例如,以下编码值无法使用上述方法转换。 但是,所有浏览器都会解码并正确执行它们。 也可以在https://mothereff.in/html-entities验证它们。

<img src=x onerror="&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041">

它被解码为<img src=x onerror="javascript:alert('XSS')">

还有更多的编码文本无法使用HtmlDecode方法解码。 在Java中, https://github.com/unbescape/unbescape处理所有此类变体。

我们在.Net中是否有类似的库,或者如何处理这种情况?

通常,您不应该允许用户在文本框中输入代码。

客户端

从您对帖子的评论来看,我只是添加一些客户端验证,以防止用户添加任何种类的恶意输入(例如,验证电子邮件字段中是否包含电子邮件),然后将相同的验证技术添加到您的服务器中。

服务器端

读取模型中的用户输入后,应先进行验证和清理,然后再进行任何进一步处理。 具有通用的AntiXSS()类,该类可以通过例如检查myString.Contains("<")myString.Contains(">")来删除任何恶意字符,例如<>符号。 如果是这样,请删除该字符。 验证您的类型。 如果要检查userEmail字段,请确保它符合电子邮件语法。

通常的想法是,您可以将数据传递给客户端,但是在不先清理和清理所有内容之前,不要信任从客户端返回的任何数据。

我找到了解决方案。 HtmlUtility.HtmlDecode解码与号“&”和分号“;”之间的字符。 但是,浏览器不会打扰后缀“;”。

就我而言,分号';' 失踪。 在调用HtmlDecode方法之前,我已经编写了简单的代码来插入分号。 现在,它可以按预期正确解码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM