[英]Unescapping client data in C# to prevent XSS or other attack
为了防止Web应用程序输入受到XSS或任何其他攻击的影响,我们希望对来自客户端(浏览器)的所有输入进行解码。
为了绕过标准验证,坏蛋对数据进行编码。 例:
<IMG SRC=javascript:alert('XSS')>
那被翻译成
<IMG SRC=javascript:alert('XSS')>
在C#中,我们可以使用HttpUtility.HtmlDecode和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中是否有类似的库,或者如何处理这种情况?
通常,您不应该允许用户在文本框中输入代码。
客户端
从您对帖子的评论来看,我只是添加一些客户端验证,以防止用户添加任何种类的恶意输入(例如,验证电子邮件字段中是否包含电子邮件),然后将相同的验证技术添加到您的服务器中。
服务器端
读取模型中的用户输入后,应先进行验证和清理,然后再进行任何进一步处理。 具有通用的AntiXSS()
类,该类可以通过例如检查myString.Contains("<")
或myString.Contains(">")
来删除任何恶意字符,例如<>
符号。 如果是这样,请删除该字符。 验证您的类型。 如果要检查userEmail
字段,请确保它符合电子邮件语法。
通常的想法是,您可以将数据传递给客户端,但是在不先清理和清理所有内容之前,不要信任从客户端返回的任何数据。
我找到了解决方案。 HtmlUtility.HtmlDecode解码与号“&”和分号“;”之间的字符。 但是,浏览器不会打扰后缀“;”。
就我而言,分号';' 失踪。 在调用HtmlDecode方法之前,我已经编写了简单的代码来插入分号。 现在,它可以按预期正确解码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.