1. iframe
(1)阻止自己的网站被其他网站通过iframe引用。如果top.location != self.location就top.location.href = '跳转链接地址'。
(2)阻止自己的网站被通过iframe引用的网站修改。通过H5的新属性sandbox可配置相关操作是否运行,allow-same-origin:允许被视为同源,可操作父级DOM和cookie等;allow-top-navigation:允许当前iframe的引用网页通过url跳转链接或加载;allow-forms:允许表单提交;allow-popups:允许浏览器打开新窗口进行跳转;为空时:以上内容均不允许。
2. opener
通过a标签或window.open()打开新标签时,新页面可以通window.opener来访问源页面的window对象。a标签通过rel属性设置"noopener(将window.opener置空) noreferrer(阻止HTTP header将当前页面地址或任何其他值作为Referrer发送) nofollow(指定搜索引擎不要跟踪链接)";window.open()时定义一个变量接受函数返回的对象,重置对象的opener和location属性为null。
3. CSRF(跨站请求伪造)
登录授信网站后产生cookie,未退出登录的情况下打开危险网站,危险网站模拟用户行为携带cookie发送恶意请求,导致授信网站误以为是用户操作。防御措施:涉及数据修改操作的请求使用post;HTTP协议中使用referer属性过滤请求来源;请求地址使用token;添加验证码等用户确认操作。
4. XSS(跨站脚本攻击)
攻击者在目标网站中植入恶意脚本,用户在浏览器上运行时执行恶意脚本,分为持久型XSS(脚本植入服务器)、非持久型XSS(对个体用户通过url参数攻击)。防御措施:对用户输入内容和服务器返回内容进行过滤和转译;谨慎使用url携带的参数。
5. 点击劫持
一般为利用iframe覆盖原网站诱导用户进行操作。防御措施:通过HTTP中的X-FRAME-OPTIONS属性控制页面是否可被使用iframe嵌入(DENY:所有网站都不能;SAMEORIGIN:只允许同域网站嵌入;ALLOW-FROM "url":允许指定域名嵌套);通过top.location != self.location阻止网站被嵌套。
6. HSTS(HTTP严格传输安全)
SSL剥离攻击:中间人攻击的一种,通过阻止浏览器与服务器创建HTTPS,从而中间人可以明文监听HTTP连接下的数据传递。当我们在访问网站时,通常只输入域名,浏览器会首先通过HTTP协议访问网站,然后通过3xx重定向使用HTTPS协议,攻击者可以在用户访问HTTP页面时替换所有 https:// 的链接为 http:// ,达到阻止HTTPS的目的。HSTS可以很大程度上解决SSL剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成 http:// 。但当浏览器没有当前网站的HSTS信息时(第一次访问或有效期过期)仍存在风险,针对上述风险主流浏览器内置了HSTS域列表,此列表由Google Chromium维护,只要在这个列表里的域名,无论何时都只使用HTTPS进行连接。
7. CDN劫持
出于性能考虑,前端通常将一些静态资源存放在CDN上,以此提高前端应用的访问速度。如果攻击者劫持了CDN或对CDN上的资源进行修改,攻击者就可以肆意修改前端页面,对用户实施攻击。防御措施:使用SRI(子资源完整性),通过给link标签或script标签增加integrity属性(分为两部分,哈希值的生成算法、哈希值)开启SRI功能,它会通过验证获取文件的哈希值是否与提供的哈希值一致来判断资源是否被篡改。