最近我建议我们使用Google CDN进行jQuery传递。我的一些同事对这种交付JavaScript库的安全性方面表示担忧。
例如,他们提到有人可能劫持DNS服务器,然后注入恶意修改的库,为不同的安全攻击敞开大门。
现在,如果黑客可以通过Google CDN注入恶意代码,那么如果从网站本身提供jQuery,他可能会这样做吗?
看来,Google CDN可以通过SSL支持服务库。
从CDN提供的jQuery真的不那么安全,然后从服务器本身提供服务?这个威胁有多严重?
解决方法
为了回应Google是否以任何方式更改这些文件的问题,Google的Google员工Ben Lisbakken suggested comparing MD5 checksums是由Google提供的文件提供给从其维护者的主站点获得的同一文件的规范版本。在链接的网站上阅读评论八。
如果您担心DNS劫持,那么当然,相同的问题将适用于从“原始”网站获取的文件。您也可能不希望在每个请求上对jQuery文件运行校验和的速度处罚 – 除非你非常偏执。当然,这样做会消除使用CDN的所有优点。
但假设你只是有点偏执,你可以尝试这样的:
>确保您引用了Google的独特和特定版本的jQuery文件。例如,请执行以下操作:
http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
而不是这样:
http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js
后一版本现在可能会返回1.4.2,但是明天会是1.4.3。如果您具有http和https需求的组合,可以使用协议相关的URL,如下所示:
//ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
>最初为此文件生成并存储自己的校验和。
>定期重复该过程,并确保新的校验和与旧的校验和匹配。如果没有,就会听到klaxons的声音。
当然可以这样做。你决定什么间隔是有意义的。每一分钟?每五个您现在拥有自动杀死开关的功能,灵敏度可以根据您的喜好进行调整。 “监视器”程序当然不需要在您要保护的应用程序中同步运行;也许您在同一台服务器上运行一个小型实用程序应用程序,仅为此目的。
很容易测试:只是改变存储的哈希。由于您引用了特定的文件版本,因此每次次要版本更新都不会按紧急按钮。当您想要移动到新版本的jQuery时,请更改站点上的AJAX API URL并存储新的哈希值。