使用SRI保护你的网站免受第三方CDN恶意攻击

news/2024/4/28 20:44:28/文章来源:https://blog.csdn.net/weixin_34203832/article/details/88980074

出于速度和降低服务器负载考虑,有时候我们会选择使用 CDN 加载第三方静态资源。对于一些热门的第三方库,在用户打开你的网页之前就很有可能在浏览别的网站时被浏览器缓存下来,这样就可以极大的提升网页加载速度。

然而使用 CDN 也提高了网站的安全风险:第三方静态资源放在第三方服务器上,CDN 的拥有者有没有可能偷偷的篡改这些文件,加入恶意代码呢?或者 CDN 服务器遭受了黑客攻击,整个文件被替换掉。虽然可能性不高,但不是零。JavaScript 对于当前浏览器页面有完全控制权,他们不仅仅能获取到页面上的任何内容,还能抓取用户输入的一些诸如密码之类的机密信息,还能获取到保存到 Cookie 中的登录票据等等内容,这就是所谓的 XSS 攻击。

我们需要一种机制确保从 CDN 下载的文件未被恶意篡改。某些下载网站就提供下载文件的 MD5 或 SHA1 码用于检查所下载文件的完整性,网页中有没有类似的机制呢?

什么是 SRI

子资源完整性 Subresource Integrity 简称 SRI 是一种安全机制,它用于让浏览器检查所下载的来自第三方的资源(例如 CDN)未被恶意篡改。它使用哈希值检查确保第三方资源的完整性。只要开发者提供了被需下载资源的哈希值,浏览器就可以检查实际下载的文件是否与预期的哈希值匹配。

使用 SRI

只需给 scriptstyle 标签添加 integrity 属性即可。例如:

  • JavaScript
<script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f" crossorigin="anonymous"></script>
  • CSS
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/7.0.0/normalize.min.css" integrity="sha384-7tIwW4quYS2+TZCwuAPnUY+dRqg28ylzlIoVXAwpfiTs+CMKsAOSsWYQ96c/ZnV+" crossorigin="anonymous">

integrity 属性值以 shaXXX- 开头,表示后面的哈希值使用的哈希算法,目前只允许 sha256sha384sha512 这三种哈希算法,以 sha384 比较多见。后面跟对应的哈希值即可。

值得注意的是,因为启用 SRI 需要获取所下载文件的内容进行计算,所以需要 CDN 服务器启用跨域资源访问(CORS)支持,即返回 Access-Control-Allow-Origin: * 头。客户端需要使用跨域的形式加载指定文件,即添加 crossorigin="anonymous" 属性。就我所知,目前国内相对常用的免费 CDN bootcdn 已经支持 CORS,百度静态 CDN 还不支持。

浏览器如何处理 SRI

  1. 当浏览器遇到一个带有 integrityscriptstyle 标签,在执行其中的 JS 脚本或应用其中的 CSS 样式之前,浏览器会首先计算所下载文件的内容的哈希值是否与 integrity 属性给定的值相同。
  2. 如果计算结果与给定值不匹配,浏览器会拒绝执行脚本内容,并报出一个网络错误,类似如下结果:
Failed to find a valid digest in the 'integrity' attribute for resource 'https://cdnjs.cloudflare.com/ajax/libs/normalize/6.0.0/normalize.min.css' with computed SHA-256 integrity 'VbcxqgMGQYm3q8qZMd63uETHXXZkqs7ME1bEvAY1xK8='. The resource has been blocked.

如何计算哈希值

这是 SRI 标准文档提供的例子:

$ echo -n "alert('Hello, world.');" | openssl dgst -sha384 -binary | openssl base64 -A

使用了 OpenSSL 这个 *nix 中通常都包含的工具计算哈希值。其中 alert('Hello, world.'); 是文件内容,你也可以用 cat Filename.js 直接读取某个文件。

输出 H8BRh8j48O9oYatfu5AZzq6A9RINhZO5H16dQZngK7T62em8MUt1FLm52t+eX6xO,在此基础上添加前缀 sha384- 就可以了。

网上也有现成的 SRI 哈希值生成器,方便好用:https://srihash.org/

CSP 与 SRI

你可以使用 内容安全政策 (CSP)强制要求当前页面所有脚本加载标签启用 SRI。例如

Content-Security-Policy: require-sri-for script;

强制要求所有 script 标签启用 SRI,浏览器会拒绝加载未启用 SRI 的 script 标签。

对应的还有 CSS 版本:

Content-Security-Policy: require-sri-for style;

你也可以同时启用两者。

错误恢复

使用 CDN 时别忘了当尝试从 CDN 加载文件失败后加载本地版本:

<script src="https://code.jquery.com/jquery-3.2.1.min.js"integrity="sha384-xBuQ/xzmlsLoJpyjoggmTEz8OWUFM0/RC5BsqQBDX2v5cMvDHcMakNTNrHIW2I5f"crossorigin="anonymous"></script>
<script>if (!window.jQuery) document.write('<script src="/jquery-3.2.1.min.js"><\/script>')</script>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_817287.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5移动Web开发(三)——在移动网站中使用HTML5

创建一个简单得HTML5页面ch01e2.html <html><head><meta name"viewport" content"widthdevice-width,initial-scale1.0"></head><body>hello to the HTML5 world.</body> </html> HTML5和其他HTML页面的唯一区别…

python selenium采集速卖通_爬虫 | 大写牛逼,用 Python 登录主流 24 个网站

爬虫脚本是大家经常用到的&#xff0c;那就避开不了登录 这一关。使用Python一般需要request库&#xff0c;补充 header 中的 post 要素&#xff0c;有些还会有 隐藏的 hidden 参数&#xff0c;可以通过浏览器 F12 或者元素审查来发现&#xff0c;对于初学者来说都是一个坑。还…

php建站错误代码0xc0000005,0xc0000005错误代码怎么解决?

在使用电脑过程中经常会出现某些错误代码&#xff0c;如0xc0000005错误故障&#xff0c;造成电脑无法正常运行&#xff0c;这要怎么办呢&#xff1f;今天小编和大家分享电脑出现0xc0000005错误代码的解决方法。具体方法如下&#xff1a;1、首先按下“winr”打开运行&#xff0c…

网站服务器 64位,如何将win7系统从32位升级到64位_网站服务器运行维护,win7,32位,64位...

win10如何重置此电脑_网站服务器运行维护win10重置此电脑的方法是&#xff1a;1、点击【开始】按钮&#xff0c;进入设置&#xff1b;2、进入【更新和安全】选项&#xff0c;点击【恢复】&#xff1b;3、找到【重置此电脑】&#xff0c;点击【开始】&#xff1b;4、选择【保留我…

JPress v2.0-rc.6 发布,新增专业的 SEO 支持

JPress 是一个使用Java&#xff08;JFinal、Jboot框架&#xff09;开发的类似 WordPress 的系统&#xff0c;但更加侧重于企业营销和微信运营。 此版本&#xff0c;主要是完善对专业的 SEO 功能配置和支持&#xff0c;如下图所示&#xff1a; 以下是 JPress v2.0-rc.7 的更新内…

写个软件来防止服务器网站CPU百分百

2019独角兽企业重金招聘Python工程师标准>>> 问题: 大概每隔两个星期左右&#xff0c; 秋色园上服务器就会来一次CPU百分百&#xff0c;由于问题发生的概率极低&#xff0c;要它重现也难&#xff0c;所以只能意淫是内存太少的原故。 以前出现&#xff0c;远程上去结…

反击“猫眼电影”网站的反爬虫策略

001 前言 前两天在百家号上看到一篇名为《反击爬虫&#xff0c;前端工程师的脑洞可以有多大&#xff1f;》的文章&#xff0c;文章从多方面结合实际情况列举了包括猫眼电影、美团、去哪儿等大型电商网站的反爬虫机制。的确&#xff0c;如文章所说&#xff0c;对于一张网页&…

域名购买和网站备案心得

在上一篇部署云服务器的文章中&#xff0c;已经租用和部署好了服务器&#xff0c;那么就讲一下最麻烦的域名购买和备案。 1.域名购买 首先说一下域名购买&#xff0c;我是在腾讯云购买的&#xff0c;价格很便宜一年也就30左右&#xff0c;对比服务器价格便宜的多&#xff0c;…

开源项目大家谈-网站性能调校-Cache的使用

之所以用这个题目是因为很多人常常问我研究开源项目的意义&#xff0c;有一些开源项目在别人眼里看起来完全没有搞头&#xff0c;是一些没有实用价值的项目。其实开源项目往往是新技术的试验田&#xff0c;是全世界优秀程序开发者智慧的汇集&#xff0c;如果你仔细研读这些开源…

揭秘博友卡通身份 学做SEO链接诱饵

首先我们来揭秘一下各位博主的卡通身份&#xff0c;纯野随机选了几个博主&#xff0c;哈哈&#xff0c;真的是好逗啊。注&#xff1a;&#xff08;若下面的卡通中没有你&#xff0c;可以留言&#xff0c;纯野下期可以把你给放上来亮相&#xff01; 若是你不喜欢请通知纯野进行…

精选国外知名网站手机版网页设计欣赏

互联网发展如此的迅速&#xff0c;手机互联网用户逐渐成了一个相当庞大的群体。所以我们的网站必须去考虑适应手机互联网用户的需求&#xff0c;从传统的电脑互联网到手机互联网(更准确的说是移动互联网)需要有至少两个方面的考虑&#xff0c;一是移动互联网用户的带宽是有限制…

【私活案例3】 获取某市网站普通高中录取分数小工具

私活案例3&#xff1a;获取某市网站普通高中录取分数小工具0 前言年龄越来越大&#xff0c;记性越来越差&#xff0c;只想把自己一些零零散散的私活经历记录下来&#xff0c;日后回头看&#xff0c;还能想起这些小项目、小技术点&#xff0c;还能想起那些和客户、朋友打交道的各…

使用whos.amung.us实时统计网站在线人数

如果需要在前台显示网站实时在线人数&#xff0c;可以使用whos.amung.us提供的一款在线人数实时统计工具&#xff0c;它可以统计你的网站或者博客当前在线人数&#xff0c;支持自定义颜色。 打开&#xff1a;https://whos.amung.us/ 滑动到下面&#xff1a; 直接复制代码&am…

转:利用ArcGIS Server REST API实现对Feature的编辑操作 - 开源IT技术网站

ArcGIS API for Flex中提供了一些工具实现对Feature的编辑操作&#xff0c;不过其实质是对ArcGIS Server REST API的再包装。为了更大的灵活性&#xff0c;在这里我们谈一下如何直接调用ArcGIS Server REST API来实现对Feature的新增、更新、删除操作。 FeatureServer 对Featur…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库&#xff0c;欢迎Star&#xff1a;https://github.com/ZhongFuCheng3y/3y 回顾上一篇&#xff1a; 《大型网站系统与Java中间件》读书笔记&#xff08;一&#xff09;这周周末读了第四章&#xff0c;现在过来做做笔记&#…

.NET技术+25台服务器怎样支撑世界第54大网站

摘要&#xff1a;同时使用Linux和Windows平台产品&#xff0c;大量使用静态的方法和类&#xff0c;Stack Overflow是个重度性能控。同时&#xff0c;取代横向扩展&#xff0c;他们坚持着纵向扩展思路&#xff0c;因为“硬件永远比程序员便宜”。 StackOverflow是一个IT技术问答…

钓鱼网站盯梢微博 360“围剿中奖骗子”

一段时间以来&#xff0c;随着“织围脖”的兴起&#xff0c;微博晋升为全民级互联网应用&#xff0c;而一些曾以短信、聊天工具为主要传播载体的钓 鱼网站也开始悄悄出现在微博上&#xff0c;其伪装方法仍然是老套的——“您中奖了”。对此&#xff0c;360安全卫士官方微博发起…

网站域名续费 服务器续费,域名续费与服务器续费

域名续费与服务器续费 内容精选换一换华为云帮助中心&#xff0c;为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档&#xff0c;帮助您快速上手使用华为云服务。帮助用户完成云服务器备份存储库的创建&#xff0c;快速购买…

hexo博客pc端不能访问手机移动端可以访问_Hexo+Kaze+Gitee Pages 搭建静态博客网站...

前言建网站本身是一个很大的工程&#xff0c;涉及前端页面的搭建&#xff0c;网站数据的存储&#xff0c;还要购置服务器资源&#xff0c;甚至是后期的维护&#xff0c;过程相当繁琐。不过如果仅仅是想搭建个人的网站&#xff0c;写写博客&#xff0c;想要美观&#xff0c;又不…

创意无极限:创意产品闪购网站Fab融资1.05亿美元

据国外媒体报道&#xff0c;美创意产品闪购网站Fab今天宣布&#xff0c;公司成功获得1.05亿投资。这个消息最先是由《华尔街日报》爆出的&#xff0c;之后Fab CEO Jason Goldberg在一篇博文中证实了这一消息。 此轮融资之前就有风声传出&#xff0c;而此次融资成功也确实让Fab如…