在 C# Winform WebBrowser 中防止 XSS

Prevent XSS in C# Winform WebBrowser

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

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

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

我首先想到删除脚本标签,如 link 所示:

或者甚至使用 HtmlAgilityPack 就像 link 中那样:

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

1/ 他说得对吗?

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

提前致谢,

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

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

至于 OWASP ESAPI,它是开源的,这意味着想要破坏您的安全系统的高级用户可以浏览 API 的代码并可能找到解决方法

因此,您应该考虑购买其他类型的安全系统,并对字符串进行编码以在写入网页时禁用 HTML 标签。

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

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