我正在为一家本地托管公司开发票务系统,其中一个要求是用户能够提交带有实际 html 的票证。这将是一个有效的输入。
<html>
<head>
<script>alert('hello!');</script>
</head>
</html>
该输入可以通过在线提交或进入系统的电子邮件放入系统。
此外,业务需求之一是查看票证的人能够看到 html 版本为 html,因此以某种方式将其呈现给浏览器是业务需求。
现在,我明白了,我绝对没有办法保护这个系统。在我能够做到的地方,我做了很多工作来保护它,但是鉴于当前的业务需求,这个特殊的安全漏洞是无法修复的。
我什至无法想象将这些东西列入白名单,因为用户可能正在描述一个嵌入了脚本标签的 html 页面,一个 web.config 文件,一个 XML 文件,一个 odf 文件,你可以命名它,他们可能有一个用户发送了一个中的例子。
我不习惯编写要求如此“开放”的软件,我不确定如何最好地解决这个问题。我目前的想法是风险管理而不是风险预防,我认为在这种情况下没有其他方法可以有效地限制恶意输入。但是,如果有人对我如何根据当前要求进行某种预防有任何建议,我会全力以赴。既然我确定有人会提出来,我也说我已经和我签约的公司的老板进行了坦率的交谈,要求不会很快改变:)
我想从处理过这种情况的人那里得到意见,以及根据这种经验你可以给出什么建议。我对理论不是很感兴趣,而是对实践感兴趣。我的部分目标是在所有者面前提出一个可靠的建议,看看我们可以做些什么来妥协整个安全与便利的权衡。
另请记住,该系统最终将出售给他们的客户,这意味着我根本无法做出许多假设。目前,该系统是为他们而构建的,但随着时间的推移,我们所做的许多假设最终将被删除或推广。
我的第一个想法是对传入电子邮件进行某种风险评估,如果电子邮件超过阈值,则会自动设置某些限制。诸如无法在浏览器中查看 html 版本,在文本编辑器而不是浏览器中打开它之类的事情。我担心这对用户来说可能是一种痛苦,并且我采取的任何解决方法(“批准电子邮件”)都将在没有任何实际想法的情况下使用,从而使这毫无价值。
我还考虑过“受信任区域”,我的意思是,来自新电子邮件地址的工单受到限制,直到来自该地址的 X 个工单,限制总是针对通过 Web 界面创建的工单/电子邮件设置,之类的东西。在许多方面,这与其他解决方案具有相同的问题。
另一个解决方案是顺其自然。这显然是最简单的解决方案,它可能是一个有效的解决方案,但我需要一个非常有力的论据才能接受它。
我并没有放弃 HTML 解析器并亲自查看电子邮件中的特定内容,但我不相信有任何自动化方法可以保护这个系统而不会出现误报,所有者已经明确表示这是完全不可接受的。据我所知,谁想通过电子邮件发送支持却永远不会收到他们的消息?
来自过去解决此问题的人的任何建议或见解将不胜感激。我使用的具体技术是 ASP.Net 4.5/IIS