web前端安全除了平常的XSS、CSRF外还存在一种安全问题就是网页劫持。所谓的网页劫持就是非法的网页被修改拦截了。来看下面的具体解释。
什么是网页劫持:
使用HTTP请求请求一个网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文,让客户端(通常是浏览器)展示“错误”的数据,通常是一些弹窗,宣传性广告或者直接显示某网站的内容。
分类 :
I、 跳转型劫持 :用户输入地址A,但是跳转到地址B
II、 注入型劫持 :过在正常的网页中注入广告代码(js、iframe等),实现页面弹窗提醒或者底部广告等。
1),注入js类劫持:在正常的页面注入js代码实现劫持。
2),iframe类劫持:将正常网页嵌套iframe或者页面增加iframe。
3),篡改页面类劫持:正常页面出现多余的劫持网页标签,导致页面整体大小发生变化。
防御 :
1. 跳转型劫持,若用单纯靠Web页面进行检测比较困难
2. 注入JS类:
1) 改写document.write方法
2) 遍历页面script标签,给外链JS增加白名单,不在白名单内js外链都上报
3.iframe类:
比较window.self 和window.top 或 比较parent 和 window,同时可增加白名单
获取正确地址
function getCorrectUrl() {
var url ;
if(parent != window) {
try {
url = parent.location.href;
}catch(){
url = document.referrer
}
}
}
4.特殊方式
类似电信捏造在白名单内的js URL和篡改页面内容的,我们用上面提到的方法检测不到这些信息,如果是在APP内,可以做的事情就比较多了,除了上面之外,还可以比较页面的 content-length。
script内核心代码如下:
function hiJackSniffer ()
var files = $ . toArray ( D . querySelectorAll ( 'script[src]' ));
var arr =[];
for ( var i = 0 , len = files . length ; i < len ; i ++){
files [ i ]. src && arr . push ( files [ i ]. src );
}
if ( arr . length ){
return sendImg ( arr , 1 );
}
arr = getParentUrl ();
if ( arr && arr . length ){ //被嵌入iframe
return sendImg ([ arr ], 2 );
}
if ( D . documentElement . outerHTML . length > 4e3 ){
var tmp ={};
var headjs = $ . toArray ( D . head . querySelectorAll ( 'script' ));
var unknownCode =[];
if ( headjs . length ){
unknownCode = unknownCode . concat ( headjs . map ( function ( v ){
return v . innerHTML ;
}). filter ( function ( v ){
return !! v ;
}));
}
var body = $ . toArray ( D . body . querySelectorAll ( '*' ));
if ( body . length > 1 ){
unknownCode = unknownCode . concat ( body . map ( function ( v )
return v . outerHTML . split ( '\n' ). join ( '' )
}). filter ( function ( str ){
if ( /^<script id="b">/ . test ( str )){
return false ;
}
return true ;
}));
}
return sendImg ( unknownCode , 3 );
}
sendImg ([], 0 );
}
漏洞挖掘 :
1)目标的HTTP响应头是否设置好了X-Frame-Options字段
确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击
DENY :标示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许
sameorigin : 表示该页面可以在相同域名页面的 frame 中展示。
allow-from uri :表示该页面可以在指定来源的 frame 中展示。
2)目标是否有javascript的Frame Busting机制
3)尝试用iframe嵌入网站
参考资料:
XSS跨站脚步攻击及防范
JavaScript防http劫持与XSS
XSS的一些总结(原理+检测+防御)
流量劫持 —— 浮层登录框的隐患
本文链接:https://my.lmcjl.com/post/12013.html
4 评论