浏览器工作原理与实践(七)——页面安全

极客逐浪者
• 阅读 558

同源策略可以隔离各个站点之间的 DOM 交互、页面数据和网络通信,但也约束了web。所以我们默认页面中可以引用任意第三方资源,然后又引入 CSP 策略来加以限制;默认 XMLHttpRequestFetch 不能跨站请求资源,然后又通过 CORS 策略来支持其跨域。不过也带来了安全问题,如XSS攻击。

XSS CookieHttpOnly

XSS跨站脚本,黑客往HTML文件或DOM中注入恶意脚本,从而在用户浏览页面时利用注入脚本对用户实施攻击。
最开始是通过跨域实现的,所以叫跨域脚本。
当页面被注入了恶意 JavaScript 脚本时,浏览器无法区分这些脚本是被恶意注入的还是正常的页面内容,所以恶意注入 JavaScript 脚本也拥有所有的脚本权限

  1. 窃取cookie信息,通过document.cookie获取Cookie信息,然后通过XMLHttpRequestFetch加上CORS发送给恶意服务器,恶意服务器拿到cookie可以模拟登录转账
  2. 监听用户行为,用addEventListener监听键盘事件,获取信用卡信息、发送到恶意服务器、作违法的事
  3. 修改DOM伪造假的登录窗口,欺骗用户输入用户名和密码
  4. 页面生成浮窗广告,影响用户体验

XSS分为存储型XSS攻击、反射型XSS攻击和基于DOMXSS攻击3种方式注入恶意脚本。

  • 存储型XSS攻击:黑客利用站点漏洞(输入名称成恶意代码)将恶意代码放到有漏洞的服务器,用户访问了有恶意代码的页面,恶意脚本会上传用户Cookie信息到恶意服务器
  • 反射型XSS攻击:恶意脚本成了用户发送请求的一部分(get地址上),然后网站又把恶意代码返回给用户,页面执行时做恶意操作。Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方。
  • 基于DOMXSS攻击:不牵扯服务器。通过wifi路由器,本地恶意软件劫持在web资源传输过程中或使用页面中修改页面

首先都是先往浏览器注入恶意脚本,然后再通过恶意脚本将用户信息发送到恶意服务器。
解决:

  1. 服务器对输入脚本进行过滤或转码
  2. 充分利用CSP,限制加载其它域资源、禁止向第三方提交数据、禁止执行内联和未授权脚本、提供上报机制,可以尽快发现攻击进行修复
  3. 使用httpOnly属性,无法通过document.cookie读出来
  4. 增加验证码
  5. 限制输入长度

CSRF 点链接

CSRF跨站请求伪造,利用用户的登录状态通过第三方站点做一些坏事。在黑客站点中

  1. 自动发起get接口,比如黑客请求接口在img src中,当加载图片时,会自动去发起img请求,如恶意代码是转账,就会被转走。
  2. 自动发起post,隐藏表单并且内容是转账,打开站点会自动加载JS进行提交表单,服务器进行转账。
  3. 引诱用户点链接,点图片地址是转账接口

CSRF不需要将恶意代码注入页面,仅是利用服务器的漏洞和用户的登录状态实施攻击。
条件:

  1. 目标站点一定要有漏洞
  2. 用户登录过目标站点,并在浏览器上保持有站点的登录状态
  3. 需要用户打开一个三方站点(黑客or论坛),关键是找到服务器漏洞

解决:

  1. 利用cookieSameSite属性,cookie是浏览器和服务器之间维护登录状态的关键数据。
    通常CSRF攻击都是从第三方站点发起的,最好能实现从第三方站点发送请求时禁止cookie的发送。因此在浏览器通过不同源发送http请求时,有如下区别:
    (1).第三方发起的请求,需要浏览器禁止发送某些关键cookie数据到服务器
    (2).同一站点发起的请求,需要保证cookie数据正常发送
    通过Set-CookieSameSite属性值:
    Strict最严,完全禁止第三方cookie
    Lax:链接打开get会带cookiepost,img,iframe,加载的url不会带。
    none:都会带。
  2. 验证请求的来源点,在服务器端验证请求来源的站点,服务器可以禁止第三方站点请求。
    从请求头中RefererOrigin判断第三方。
    Referer会包含路径来源地址信息。
    会优先判断Origin包含域名信息
  3. CSRF token
    1.浏览器发送请求时,服务器生成CSRF Token植入返回的页面中。2.浏览器发起转账时要带上页面的CSRF Token

页面安全问题主要原因是浏览器为同源策略开的2个后门:一是页面可以任意引用第三方源。二通过CORS跨域请求。
基于这些,又引入了CSP限制页面任意引入外部资源、引入HttpOnly来禁止请求发送一些关键cookie、引入SameSiteOrigin,来防止CSRF攻击。

点赞
收藏
评论区
推荐文章
室与 室与
4年前
Cors跨域解决
一、浏览器跨域问题产生1、跨源资源共享(CORS)中文文档:https://developer.mozilla.org/zhCN/docs/Web/HTTP/Access_control_CORS2、什么是浏览器跨域问题指的是浏览器不能执行其他网站的脚本。JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象,即同源策略。就好比我
芝士年糕 芝士年糕
2年前
什么是跨域
域: 是指浏览器不能执行其他网站的脚本跨域: 它是由浏览器的 同源策略 造成的,是浏览器对 JavaScript 实施的安全限制,所谓同源(即指在同一个域)就是两个页面具有相同的协议 protocol,主机 host 和端口号 port 则就会造成 
Wesley13 Wesley13
3年前
java通过sina端口提取股票历史数据并存入MySQL
 1.提取股票代码代码见:http://www.oschina.net/code/snippet\_2688840\_55337(http://www.oschina.net/code/snippet_2688840_55337) 2抓取sina股票的json页面数据;代码见:http://www.oschina.net/code/snip
虾米大王 虾米大王
2年前
Java代码001
code001.jsp一个简单的JSP页面显示系统时间当前时间:
虾米大王 虾米大王
2年前
java代码012
code012.jspInserttitlehere<%JSP内置对象1.request用于处理HTTP请求中的各项参数。如,删除可以通过request对象的getParameter()方法获取如,request.getParameter("id")在请求转发时,需要把一些数据传递到转发后的页面处理。就需要用到request的se
虾米大王 虾米大王
2年前
java代码025
code025.jsp登录页面用户名:密码:
虾米大王 虾米大王
2年前
java代码029
code029.jsp页面设置缓冲
Stella981 Stella981
3年前
Js中的跨域问题
一、什么是跨域?1.定义:跨域是指从一个域名的网页去请求另一个域名的资源。比如从www.baidu.com页面去请求www.google.com的资源。但是一般情况下不能这么做,它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。跨域的严格一点的定义是:只要协议,域名,端口有任何一
Stella981 Stella981
3年前
35道面向初中级前端的基础面试题
如需获取完整版229页PDF面试题,请直接滑到文末。1\.什么是同源策略?同源策略可防止JavaScript发起跨域请求。源被定义为协议、主机名和端口号的组合。此策略可防止页面上的恶意脚本通过该页面的文档对象模型,访问另一个网页上的敏感数据。参考资料:浏览器的同源策略(https://www.oschina.
liam liam
1年前
解决 Axios 跨域阻碍,提高前端接口访问效率
跨域是指访问另外一个域的资源,由于浏览器的同源策略,默认情况下使用XMLHttpRequest和Fetch请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略,这是由浏览器对施加的安全限制。Axios跨域常见报错跨域请求被阻止(CrossOriginRe
ZOS对象存储跨域资源访问的实现和使用
跨域指的是从一个域名去请求另外一个域名的资源,即跨域名请求。跨域时,浏览器不能执行其他域名网站的脚本,这是由浏览器的同源策略造成的,是浏览器施加的安全限制。同源策略是一种约定,是浏览器最核心也最基本的安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源,这是一个用于隔离潜在恶意文件的重要安全机制。