在C#Winform WebBrowser中防止XSS

时间:2016-02-16 14:14:49

标签: c# winforms xss owasp

我在我的应用程序中使用了C#WebBrowser。这个WebBrowser接收一个Html输入作为字符串,就像这个相当简单的代码部分:

string HtmlToDisplay = UTF8Encoding.UTF8.GetString(Convert.FromBase64String(RawDataB64));
webBrowser1.DocumentText = HtmlToDisplay;

由于WebBrowser组件将执行Html中包含的任何脚本,我需要通过" clean"来防止XSS攻击。要显示的Html字符串。

我首先考虑删除此链接中的脚本标记:https://stackoverflow.com/a/19414886/969881

甚至可以在该链接中使用HtmlAgilityPack:https://stackoverflow.com/a/19414865/969881

但是我的同事说它不够有效,而且我必须使用OWASP ESAPI来防止这种攻击。

1 /他是对的吗?

2 /如果是这样,有没有办法使用OWASP ESAPI作为数据的原始字符串清理器显示到webBrowser组件中?

提前致谢,

1 个答案:

答案 0 :(得分:2)

删除script代码并不能完全消除网页上JavaScript的使用。这种方法有一些明显的解决方法。
例如:

<input type="button" onclick="document.getElementById('test').innerHTML = '';" />

至于OWASP ESAPI,它是开源的,这意味着希望破坏您的安全系统的高级用户可以浏览API的代码并可能找到解决方法。
<因此,您应该考虑购买其他类型的安全系统以及编码字符串以禁止HTML标签在写入网页时起作用。

就安全性而言,我肯定不会依赖于简单地用空字符串替换<script>的所有实例。这绝对没有效率,如上面的示例解决方法所示。编码字符串是一种相当不错的方法来防止大多数解决方法,虽然高级用户可以找到方法。

因此回答你的问题:
(1)是的,他是正确的有一种比编码字符串更有效的方法
(2)我个人不建议使用开源字符串清理器,因为用户可以浏览代码并可能找到破坏安全机制的方法。