一旦用户登录,除非绝对必要,我会尽量避免使用任何客户端脚本。以下是有关在线金融服务的网页工作建议:
1)通过HTTPS从同一域向用户发送所有资产。虽然这样会更慢,也更费带宽,但更安全,因为您可以直接控制所有资产,防止其被篡改。在此方面,即使包括图像,我也指的是所有资产,因为操纵包含文本内容的图像可能会用于在网络钓鱼攻击之前发送虚假指令。在这方面,我不会使用CDN存储您的资产,因为那不是您拥有的位置,所以您无法控制监视存储的数据是否被篡改。
2)不要使用AJAX或任何其他XMLHttpRequest对象。异步通信的目的是在不重新加载页面的情况下在点之间传递信息。这对可用性很好,但完全破坏了安全性。由于它在客户端执行,因此受损代码也可以用于在用户端解密信息后将信息从用户传送到不受信任的第三方,从而破坏合法的SSL加密。在处理购买、PII或财务数据时,请始终确保每个用户的信息交易强制重新加载页面或新页面。
3)避免使用任何客户端脚本。这意味着根本不要使用ActiveX、Flash或Acrobat等。报告的95%的安全漏洞都归因于客户端脚本,其中70%的攻击目标是处理软件的内存损坏。虽然JavaScript通常不会因缓冲区溢出而闻名,但我仍建议尽可能少地使用它来操作DOM。
4)永远不要将匿名函数作为JavaScript中函数或方法的参数传递。这并不是经常发生的事情,但在某些内置方法的情况下,这可能会通过JavaScript解释器打开一个到处理软件的漏洞,从而成为插入必要代码以导致缓冲区溢出的攻击向量。
5)不要使用onsubmit事件将脚本执行附加到表单数据提交上。违反执行代码或附加额外恶意代码可以创建一个点,包括XMLHttpRequest函数,以便在将其发送到可信源之前匿名将表单数据传送到不受信任的第三方,即使行动属性的传输协议是HTTPS。
6)只要您坚持使用有效的XHTML、CSS和文本来实现几乎所有可能的用户体验,并且仅使用HTTPS进行通信,您就应该大多没问题。
您必须记住,银行和教育机构接收了40%的所有已知攻击,因此您必须假定您的工作将受到攻击并被破坏。2008年单次攻击的平均成本为1130万美元。如果银行可以因这些损失而攻击您,因为您没有考虑安全的全部深度,那么您会如何回应?请计划以确保您的工作尽可能地锁定。