Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Google Safebrowsing 与 前端静态资源加载 #41

Open
YIXUNFE opened this issue Dec 15, 2015 · 0 comments
Open

Google Safebrowsing 与 前端静态资源加载 #41

YIXUNFE opened this issue Dec 15, 2015 · 0 comments

Comments

@YIXUNFE
Copy link
Owner

YIXUNFE commented Dec 15, 2015

Google Safebrowsing 与 前端静态资源加载

这些年随着互联网的兴起,钓鱼网站、恶意站点也是层出不穷。浏览器生产商为解决这些问题费了不少力,想了不少解决办法。比如给 alert 对话框添加了 “阻止此页面创建更多对话框” 选项以避免浏览器被恶意的无限弹框;增加了恶意站点的提示,需要手动加入白名单后才可以访问等。

这些防止用户受到伤害的措施中,有一项是我们今天要讲述的主角 —— Google Safebrowsing。它会对网页请求的静态资源经由浏览器与谷歌通信以识别资源是否安全,这也就改变了我们对前端静态资源加载的一般认知。


## 什么是 Google Safebrowsing

Google Safebrowsing 是由谷歌提供的一个服务,它存有一份具有潜在危险的资源 URL 列表,实际用于比对的应该是 URL 字符串的哈希值。当对资源 URL 的哈希进行碰撞检测命中后,会告知用户该资源具有潜在危险。
目前 Firefox、Chrome 和 Safari 都在使用该项服务检查用户浏览的内容是否具有潜在危险。


## 在 Google Safebrowsing 影响下的加载流程
页面 浏览器 资源服务器 谷歌服务
发起静态资源请求 - - -
- 判断是否具有本地缓存,没有则发起请求 - -
- - 判断是响应 304 或资源 -
- 得到响应,根据 HTTP 头决定是否写入缓存 - -
- 对资源进行本地哈希碰撞,如果不匹配则请求谷歌服务 - -
- - - 对资源进行哈希碰撞并响应结果
- 如果判定为安全文件则传递至页面 - -
页面得到请求内容 - - -

(表格从上至下表示时间线)


浏览器为了识别响应的资源是否具有安全隐患,在资源响应后先进行了本地的哈希碰撞(浏览器自身应该存有一份实效性不强的恶意资源列表),当检查结果不通过时会联网请求谷歌的服务,然后决定是否将响应的资源交给页面处理。

这种加载资源的过程比我们通常认为的加载过程多出了一个维度,即将客户端分成了 “页面” 和 “浏览器” 两个维度。这样的细分能够使我们更好的认识到浏览器自身的行为,从而更好的排查问题。


## 请求 Google Safebrowsing 造成的影响

众所周知,由于 “局域网” 下无法访问谷歌服务,浏览器在联网请求 Google Safebrowsing 时得不到响应(GFW 针对谷歌的封锁采取 hold 链接,不释放,不重置),就只能等待超时。从 Firefox 的历史版本中可以查看到,火狐设置的超时时间是 5 秒(查看)。


## 如何关闭 Google Safebrowsing

Google Safebrowsing 服务可以从浏览器的设置中关闭。以 Firefox 为例,可以在 “设置 - 安全” 中将 “阻止已报告的攻击站点” 和 “阻止已报告的钓鱼网站” 两项取消选中。

qq 20151215144610


嫌浏览器一个个设置麻烦就干脆把 host 改一改。

127.0.0.1 safebrowsing.clients.google.com
127.0.0.1 safebrowsing-cache.google.com

## Thanks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant