2

最近参与了一小部分安全排查,涉及到一些前端编码安全问题,记个小tip。

1.Http请求头中的Referer

0a2b525c5fc64af36282_1115x362.png@900-0-90-f.png
上图是一个http请求的header,其中referer字段就是当前的页面地址,那么这个地址究竟有什么用呢?
MDN上是这么解释的:Referer首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用referer首部识别访问来源,可能会以此进行统计分析,日志记录以及缓存优化等。

    举个栗子,我在www.google.com页面上有一个链接指向www.baidu.com,点击该链接后会请求资源,在请求的header里就会包含Referer:http:www.baidu.com。
    用于服务端的防盗链。

2.window.opener

    **划重点**

页面跳转功能在日常开发中是非常常见的,一般实现方式无非两种

  1. 在HTML中通过a标签直接跳转<a href="www.baidu.com" target="_blank"/>
  2. **在js中调用window.open("www.baidu.com");

两种方式都是打开一个新的tab页,然而这两种方式都会有一个安全问题,假设我现在有页面a,在a页面通过以上方式打开了页面b,在b页面的控制台就可以通过window.opener.location="c"来将a页面替换为c页面,如果此时c是一个和长得一样的钓鱼网站,用户在c上的操作就有可能泄露一些关键信息,如密码等。
防御方式:
1:通过a标签跳转的在标签内增加属性 ref="noopener",增加该属性之后,当一个新页面通过一个链接打开后,就无法通过window.opener执行一些恶意的javascript代码。
2:同理,跳转代码这样写:

var win=window.open("www.baidu.com");
win.operer=null;

张磊
15 声望1 粉丝