网站内容劫持 广告(什么是HTTP劫持呢,大多数情况是运营商HTTP劫持)
优采云 发布时间: 2021-11-03 22:17网站内容劫持 广告(什么是HTTP劫持呢,大多数情况是运营商HTTP劫持)
什么是 HTTP 劫持?大多数情况下,运营商HTTP劫持。当我们使用 HTTP 请求请求一个 网站 页面时,网络运营商会将精心设计的网络数据包插入到正常的数据流中,让客户端(通常是浏览器)显示“错误”的数据,通常是一些弹出——上橱窗、促销广告或直接展示特定的 网站 内容。大家应该都遇到过吧。
DNS劫持
DNS劫持就是劫持DNS服务器,通过某种方式获取某个域名的解析记录控制权,然后修改该域名的解析结果,导致对该域名的访问从原来的IP地址转移到修改后的指定IP。其结果是无法访问特定网站或访问的是虚假网站,从而达到窃取信息或破坏原有正常服务的目的。
DNS劫持更是过分。简单地说,我们请求的内容被直接重定向了。本文不会过多讨论这种情况。
XSS 跨站脚本
XSS 是指攻击者的漏洞,将恶意代码注入网页。当用户浏览页面时,注入的代码就会被执行,从而达到攻击的特殊目的。
关于这些攻击是如何产生的,以及攻击者如何将恶意代码注入到页面中,本文不作讨论。只要你知道HTTP劫持和XSS最终都是在客户端执行的恶意代码,通常是用户的浏览器端,本文将讨论假设注入已经存在,如何使用Javascript进行有效的前端防护。
页面被嵌入到一个 iframe 中,并且 iframe 被重定向
先说一下我们的页面嵌入了iframe的情况。即,为了尽量减少植入广告对原创网站页面的影响,网络运营商通常会将原创网站页面放入与原创页面相同大小的iframe中。,那么这个iframe就可以用来隔离广告代码对原页面的影响了。
这种情况比较好处理,我们只需要知道我们的页面是否嵌套在iframe中,如果是,则将外层页面重定向到我们的正常页面。
那么有没有办法知道我们的页面当前存在于 iframe 中?是的,它是 window.self 和。
窗口.self
返回对当前窗口对象的引用。
返回窗口系统中最顶层窗口的引用。
对于非同源域,iframe子页面无法通过parent.location或者top.location获取具体的页面地址,但是可以写入top.location,也就是说可以控制父页面的跳转。
这两个属性可以分别简写为self和top,所以当我们发现我们的页面嵌套在一个iframe中时,我们可以重定向父页面:
if (self != top) {
// 我们的正常页面
var url = location.href;
// 父级页面重定向
top.location = url;
}
使用白名单允许正常的 iframe 嵌套
当然,在很多情况下,我们的页面可能会以各种方式进行推广,或者正常的业务需要嵌套在iframe中。这时候,我们需要一个白名单或者黑名单。当我们的页面嵌套在iframe中并且父页面域名在白名单中时,不进行重定向操作。
如上所述,使用 top.location.href 无法获取父页面的 URL。这时候就需要使用document.referrer。
跨域 iframe 的父页面的 URL 可以通过 document.referrer 获取。
<p> 1 // 建立白名单
2 var whiteList = [
3 \'www.aaa.com\',
4 \'res.bbb.com\'
5 ];
6
7 if (self != top) {
8 var
9 // 使用 document.referrer 可以拿到跨域 iframe 父页面的 URL
10 parentUrl = document.referrer,
11 length = whiteList.length,
12 i = 0;
13
14 for(; i