Fork me on GitHub

web安全问题分析及处理

前言

这是我观看了《前端漏洞分析及处理-蔡慧芨》公开课之后的一个总结及简单实践体会。在可能的情况下我会把他们都实际操作一遍,更加深刻地体会前端安全的重要性。

web安全问题有哪些

  • XSS-跨站脚本攻击(全称Cross SiteScript)
  • CSRF-跨站伪造请求(Cross Site Request Forgery)
  • SSRF-服务器伪造请求(Server-Side Request Forgery)
  • hijack-劫持

XSS-跨站脚本攻击

概念

全称是跨站脚本攻击(Cross SiteScript),用户填写的信息是可运行的js代码,并且操作了用户的界面(叫这个简称据说是为了和CSS做区分)

类型

  • 反射型–从URL中读取内容展示(示例
  • 存储型–从后台读取内容展示(示例

危害

如果恶意的js代码能够在我们的页面中运行的话,他们就可以操纵我们用户的界面,甚至是盗取用户私密信息,例如记录登录态的cookie等。

防范手段

  • 富文本–白名单过滤,可以理解为用户提交的信息只有符合白名单的标准才能通过,否则就会过滤掉,像一些敏感的标签和属性都会被过滤掉(示例
  • 纯文本–html encode, js encode,即把标签转化为语义标签(示例
  • 关于转义的时机,如果是多端共用提交的值的话一般展示时转义,因为有的端例如安卓要用就要反转义,工作量就比较大。如果都是web端的话我觉得在提交时就转义会比较好

CSRF-跨站伪造请求

概念

全称跨站伪造请求(Cross Site Request Forgery),利用你在网站登录的状态,悄悄提交各种信息(post,get请求)

场景

这种场景一般是你先正常登录了一个目标网站,并且没有退出登录,这个时候如果你点击了页面上的一个钓鱼网站(可能是中奖信息啊、性感美女之类的,哈哈),钓鱼网站就会主动向你的网站发起请求,这个时候你的登录态还是存在的,因为浏览器的不同进程之间可以共享登录态,所以钓鱼网站这个时候是可以顺利以你的身份任意访问你的网站的接口。

防范手段 (示例

  • 提交方式必须用POST然后用refer判断请求来源的域名是否是白名单里的合法域名,因为post请求肯定会有refer,而get请求不一定有。refer必须要页面内跳转才会有,直接在地址栏输入请求是没有的。
  • Token登录态校验,说白了钓鱼网站能够访问你的网站是因为自动获取了cookie信息,但你在请求头或者请求参数中加入token登录态字段的话他就没法自动获取了。

SSRF-服务器伪造请求

概念

服务器伪造请求(Server-Side Request Forgery)是利用某些业务服务器端会发起请求,请求内网地址

如何防范 (示例

  • 域名限制
  • 内网IP限制
  • 内网请求地址做token(特殊登录态)

hijack-劫持

概念

页面劫持,例如利用iframe嵌套你的页面,骗取用户输入信息

如何防范

  • 页面劫持:window.parent判断
  • Json劫持:返回{},而不是返回数据

其他攻击方式

利用回调的URL,也就是篡改你的redirect-url,例如你登录或者授权通过后的URL被篡改了

  • 校验redirect-url

JSONP & CORS安全校验

  • 这种防御手段是利用refer校验或者token校验

参考