提供jQuery的CDN有多安全?

Dan*_*Dan 21 security jquery cdn

我们构建具有公共(非安全)区域和安全(通过HTTPS提供)区域的站点,并且我们使用jQuery库.

最近我建议我们使用Google CDN进行jQuery交付.我的一些同事对这种提供JavaScript库的方式的安全方面表示担忧.

例如,他们提到有人可能会劫持DNS服务器,然后注入恶意修改的库,为不同的安全攻击打开大门.现在,如果黑客可以通过谷歌CDN注入恶意代码,那么如果从网站本身提供jQuery,他可能也会这样做,对吗?

谷歌CDN似乎支持通过SSL服务库.

从CDN服务jQuery真的不那么安全,然后从服务器本身服务吗?这种威胁有多严重?

Ken*_*ler 6

减轻风险的一种方法是对从谷歌获得的文件运行校验和,并将其与已经拥有的已知良好校验和进行比较.

在回答有关Google是否以任何方式更改这些文件的问题时,Google员工Ben Lisbakken建议将 Google提供的文件的MD5校验和与从其维护者主页上获得的该文件的规范版本进行比较.阅读链接网站上的评论8以获取上下文.

如果您担心DNS劫持,那么当然同样的问题将适用于从"原始"网站获得的文件.您也可能不希望在每次请求时对jQuery文件运行校验和产生速度惩罚 - 除非您非常偏执.当然,这样做会消除使用CDN的所有优点.

但假设你只是有点偏执,你可以尝试这样的事情:

  • 确保您引用了Google的jQuery文件的唯一且特定版本.例如,执行以下操作:

    http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
    
    Run Code Online (Sandbox Code Playgroud)

    而不是这个:

    http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js
    
    Run Code Online (Sandbox Code Playgroud)

    后一版本现在可能会返回1.4.2,但明天会返回1.4.3.如果您有http和https需求的组合,则可以使用协议相对URL,如下所示:

    //ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js
    
    Run Code Online (Sandbox Code Playgroud)
  • 最初为此文件生成并存储您自己的校验和.

  • 定期重复该过程,并确保新校验和与旧校验和匹配.如果没有,请发出喇叭声.

当然,您可以通过编程方式执行此操作.你决定什么时间间隔有意义.每一分钟?每五个?您现在拥有自动切换开关的材料,其灵敏度可以根据您的喜好进行调整."监视器"例程当然不必在您希望保护的应用程序中同步运行; 也许你只是为了这个目的在同一台服务器上运行一个小实用程序.

测试很容易:只需改变存储的哈希值即可.由于您引用了特定的文件版本,因此每次次要版本更新都不会按下应急按钮.如果您想要转移到新版本的jQuery,请更改站点上的AJAX API URL并存储新哈希.