在浏览器中显示 HTML 电子邮件正文之前确保安全
Ensure safety before showing HTML email bodies in browser
我正在开发一个助手(用 VB.NET 为 Winforms 编写),以帮助在我的组织内部筛选和分发收到的电子邮件,该助手现在并将继续由人类员工制作(我只需要加快他们的工作)。程序会将每条消息转换为 HTML 文档并将其附件转换为 PDF 并将其存储在内部数据库中。这部分已经在工作了。
我已经在使用 HtmlAgilityPack 来处理内联图像 (src="cid:..."
),但我担心我可以做些什么来防止在显示消息时激活消息中的恶意内容(在 .NET 的 WebBrowser 控件中)。
我想到了我可以做的两件事,还有 HtmlAgilityPack:
删除每个 <script>
元素;
将每个 <a href="...">
属性更改为 "#"
任何对这个问题更有经验的人都可以建议我应该采取额外的步骤来处理每条消息的 HTML 的 "cleansing" 吗?
非常感谢!
作为额外的安全层,您可以:
使用 URL 扫描仪检查嵌入的 URL。我建议 UrlVoid,他们也有一个 API(如果你已经有合适的病毒扫描程序就没有意义)。
按照建议,您可以删除所有 script
和其他所有 style
块:
Dim doc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
doc.LoadHtml(html)
doc.DocumentNode.Descendants.Where(() => { }, ((n.Name = "script") _
OrElse (n.Name = "style"))).ToList.ForEach(() => { }, n.Remove)
解析您不想允许的元素的任何不需要的属性,例如 onclick()
和其他 javascript 事件。
删除其他不需要的标签:HTML Agility Pack strip tags NOT IN whitelist
注:还有很多厉害的PHPHTMLsanitizer/purifier。您可以使用它们来做一些快速测试(或者甚至使用一个来预处理您的内容)。通常建议 HTML Purifier。
我正在开发一个助手(用 VB.NET 为 Winforms 编写),以帮助在我的组织内部筛选和分发收到的电子邮件,该助手现在并将继续由人类员工制作(我只需要加快他们的工作)。程序会将每条消息转换为 HTML 文档并将其附件转换为 PDF 并将其存储在内部数据库中。这部分已经在工作了。
我已经在使用 HtmlAgilityPack 来处理内联图像 (src="cid:..."
),但我担心我可以做些什么来防止在显示消息时激活消息中的恶意内容(在 .NET 的 WebBrowser 控件中)。
我想到了我可以做的两件事,还有 HtmlAgilityPack:
删除每个
<script>
元素;将每个
<a href="...">
属性更改为"#"
任何对这个问题更有经验的人都可以建议我应该采取额外的步骤来处理每条消息的 HTML 的 "cleansing" 吗?
非常感谢!
作为额外的安全层,您可以:
使用 URL 扫描仪检查嵌入的 URL。我建议 UrlVoid,他们也有一个 API(如果你已经有合适的病毒扫描程序就没有意义)。
按照建议,您可以删除所有
script
和其他所有style
块:Dim doc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument doc.LoadHtml(html) doc.DocumentNode.Descendants.Where(() => { }, ((n.Name = "script") _ OrElse (n.Name = "style"))).ToList.ForEach(() => { }, n.Remove)
解析您不想允许的元素的任何不需要的属性,例如
onclick()
和其他 javascript 事件。删除其他不需要的标签:HTML Agility Pack strip tags NOT IN whitelist
注:还有很多厉害的PHPHTMLsanitizer/purifier。您可以使用它们来做一些快速测试(或者甚至使用一个来预处理您的内容)。通常建议 HTML Purifier。