使用CDN托管代码时应考虑哪些安全问题和顾虑?

12

我正在为一家重要金融公司的网站工作,我们倾向于避免使用在整个网站上使用的jQuery库的CDN托管版本,原因是出于“安全问题”的考虑。

我猜想(尽管我从未完全解释过)这些担忧与代码在Google或Microsoft服务器上被攻击而导致潜在的物理安全威胁、CDN网络不可用造成的声誉风险(从而使我们网站上的功能无法使用)以及这些情况可能产生的任何其他固有风险有关。

我的问题是-这些安全问题的有效性如何,并且可能采取什么措施来减轻在CDN托管网络上发现的任何安全风险?


注:CDN是内容分发网络的缩写。

嗯...是吗?你更喜欢用ExtJS吗? - Phil.Wheeler
5个回答

11

如果你只是将它们用作JavaScript包含,而JavaScript仅在客户端使用,那么它可能具有访问通过DOM呈现为XHTML的任何内容和一切的权限。这将基于CDN是否被黑客攻击以及所包含的JavaScript是否受到恶意修改。有关在跨域上使用JavaScript的信息,请参见Google的JavaScript API如何绕过AJAX中的跨域安全

正如其他人所说,考虑到几乎没有优势,这样做并不值得冒险。 JavaScript库通常太小,无需担心节省服务器空间/带宽/访问速度等问题...


1
那 - 我认为 - 这就是问题的关键。我怀疑jQuery并不是很大这一事实意味着通过CDN进行托管的[被认为的]优势并不足够重要。 - Phil.Wheeler
2
在这种环境下使用CDN,你处于一个无法获胜的境地。无论你提出什么优点,他们总会反问:“在任何层面上,这是否存在安全风险?” :( - Alex

4
关于CDN网络不可用的问题:这种情况极不可能发生,可用性百分比可能会高于你自己的网络。你可以说,自己托管至少可以确保唯一的停机时间是在你的系统出现故障时,因此导致问题的网络故障交叉部分最小。
关于安全性:数据可能会被攻击,或者传输通道可能会被拦截并通过XSS和CSRF攻击替换为恶意代码。我认为这种可能性也非常低。
还有关于cookie和安全连接(使用https而不是http)的问题,涉及到警告消息和不匹配证书(请参见http://idunno.org/archive/2009/09/16/quick-thoughts-on-the-microsoft-ajax-cdn.aspx)。微软确实支持SSL,但我不确定雅虎和谷歌是否支持(他们应该支持)。谷歌不使用cookie进行跟踪,但他们仍然会看到访问其CDN网络的IP,并且如果选择的话可以将其用于跟踪。
CDN的价值在于,如果用户访问使用CDN的其他网站,则可以通过本地缓存脚本来提高速度。但对于大型机构而言,我认为并不需要。

3
一旦用户登录,除非绝对必要,我会尽量避免使用任何客户端脚本。以下是有关在线金融服务的网页工作建议:
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万美元。如果银行可以因这些损失而攻击您,因为您没有考虑安全的全部深度,那么您会如何回应?请计划以确保您的工作尽可能地锁定。

2
你不应该阻止人们使用客户端脚本。客户端脚本是为了增强用户体验而存在的。话虽如此,你永远不应该依赖客户端,在服务器上执行业务规则验证。你从错误的角度解决了安全问题。 - Jay
这是一个非常详细的答案,但有点超出了关于CDN的问题范围...它似乎回答了一个更一般的问题,即如何编写一个安全(和极度偏执)的网站。 - Adam

2

如果有的话,您应该查看免费CDN托管版本的条款和条件。然而,对于“一个主要的金融公司”,这可能不够好。

如果您想使用CDN,那么与其中一家签订合同并仅使用自己的“CDN托管”版本如何?CDN带宽非常实惠。


这实际上是一个非常有趣的想法,尽管我怀疑那些有权力的人会争辩说“为什么要花费这样的费用,当我们可以只在本地存储文件时呢?这似乎是为了很少的好处而付出过多的努力。” - Phil.Wheeler
如果只是jQuery,我会倾向于同意。jQuery非常小。 - Craig Stuntz

0

我猜他们的服务器安全性比你的服务器要好得多,但是他们服务器上遭受攻击的数量比你的多得多。

如果你没有为所有的图像、样式等使用CDN,那就完全不用使用CDN。这只是一个单一的文件,对你和你网站的用户来说不会有任何大的影响。


他们的服务器遭受攻击的次数比你的服务器遭受攻击的次数要多得多。嗯,CDN与主要金融机构相比,肯定不是CDN被黑客攻击来窃取现金储备... - Alex
1
虽然你说得没错,这只是一个单独的文件,但由于我们的流量相当高(虽然不像 Google 或 StackOverflow 那么高,但也算是相当高了),因此我们应该至少考虑到任何可以在延迟、并行等方面获得的优势。 - Phil.Wheeler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接