最近参与了一小部分安全排查,涉及到一些前端编码安全问题,记个小tip。
1.Http请求头中的Referer
上图是一个http请求的header,其中referer字段就是当前的页面地址,那么这个地址究竟有什么用呢?
MDN上是这么解释的:Referer首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进入的。服务端一般使用referer首部识别访问来源,可能会以此进行统计分析,日志记录以及缓存优化等。
举个栗子,我在www.google.com页面上有一个链接指向www.baidu.com,点击该链接后会请求资源,在请求的header里就会包含Referer:http:www.baidu.com。
用于服务端的防盗链。
2.window.opener
**划重点**
页面跳转功能在日常开发中是非常常见的,一般实现方式无非两种
- 在HTML中通过a标签直接跳转
<a href="www.baidu.com" target="_blank"/>
-
**在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;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。