前端增长(web安全)

662 阅读6分钟

为什么需要同源策略?

如果没有同源策略,恶意网站可以做任何事情。

比如:插入恶意脚本,或者用户账号密码信息,读取浏览器cookie信息等,然后上传到自己的服务器。

同源策略体现在哪?

  • dom。js脚本只能操作同源的网页
  • 浏览器存储的数据:js脚本只能读取同源的cookie,indexDB,localStorage等
  • 网络:XHR只能在同源里通讯

什么是CORS?

跨域资源共享(CORS),使用该机制可以进行跨域访问控制,从而使跨域数据传输得以安全进行。

www.ruanyifeng.com/blog/2016/0…

什么是CSP?

CSP 的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联 JavaScript 代码

XSS全称是什么?具体是什么意思?

XSS 全称是 Cross Site Scripting,为了与“CSS”区分开来,故简称 XSS,翻译过来就是“跨站脚本

最开始的时候,这种攻击是通过跨域来实现的,所以叫“跨域脚本”。但是发展到现在,往 HTML 文件中注入恶意代码的方式越来越多了,所以是否跨域注入脚本已经不是唯一的注入手段了,但是 XSS 这个名字却一直保留至今。

xss危害

  • 窃取cookie信息(可通过httpOnly避免)
  • 监听用户行为(恶意 JavaScript 可以使用“addEventListener”接口来监听键盘事件)
  • 修改dom伪造一些登录窗口之类的
  • 在页面生成浮窗广告

主要有存储型XSS攻击、反射型XSS攻击和基于 DOM的XSS 攻击三种方式来注入恶意脚本。

  • 存储型 首先黑客利用站点漏洞将一段恶意 JavaScript 代码提交到网站的数据库中;

然后用户向网站请求包含了恶意 JavaScript 脚本的页面;

当用户浏览该页面的时候,恶意脚本就会将用户的 Cookie 信息等数据上传到服务器。

  • 反射型 在一个反射型 XSS 攻击过程中,恶意 JavaScript 脚本属于用户发送给网站请求中的一部分,随后网站又把恶意 JavaScript 脚本返回给用户。当恶意 JavaScript 脚本在用户页面中被执行时,黑客就可以利用该脚本做一些恶意操作。

注:Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方

  • 基于DOM的 基于 DOM 的 XSS 攻击是不牵涉到页面 Web 服务器的。具体来讲,黑客通过各种手段将恶意脚本注入用户的页面中,比如通过网络劫持在页面传输过程中修改 HTML 页面的内容,这种劫持类型很多,有通过 WiFi 路由器劫持的,有通过本地恶意软件来劫持的,它们的共同点是在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据

所以,无论是何种类型的 XSS 攻击,它们都有一个共同点,那就是首先往浏览器中注入恶意脚本,然后再通过恶意脚本将用户信息发送至黑客部署的恶意服务器上。

如何阻塞xss攻击

  • 服务器对内容进行转码
code:<script>alert('你被xss攻击了')</script>

转码后,

code:&lt;script&gt;alert(&#39;你被xss攻击了&#39;)&lt;/script&gt;
  • 实施CSP
  1. 限制加载其他域下的资源文件,这样即使黑客插入了一个 JavaScript 文件,这个 JavaScript 文件也是无法被加载的

  2. 禁止向第三方域提交数据,这样用户数据也不会外泄

  3. 禁止执行内联脚本和未授权的脚本

  4. 还提供了上报机制,这样可以帮助我们尽快发现有哪些 XSS 攻击,以便尽快修复问题

不过具体情况具体分析,不要过往矫正。

  • 使用HttpOnly 只适用于真的不需要再业务里使用到cookie的场景

CSRF全称是什么?具体是什么意思?

CSRF 英文全称是 Cross-site request forgery,所以又称为“跨站请求伪造”,是指黑客引诱用户打开黑客的网站,在黑客的网站中,利用用户的登录状态发起的跨站请求。简单来讲,CSRF 攻击就是黑客利用了用户的登录状态,并通过第三方的站点来做一些坏事。

主要有下面这些形式可形成CSRF:

  • 自动发起get(如加载图片)
  • 自动发起post(如表单自动提交)
  • 引诱用户点击某连接

如何阻止CSRF?

  • 利用 Cookie 的 SameSite 属性
  • 验证请求的来源站点(Origin Referer)
  • 使用Crsf Token

什么是安全沙箱?

在渲染进程和操作系统之间建一道墙,即便渲染进程由于存在漏洞被黑客攻击,但由于这道墙,黑客就获取不到渲染进程之外的任何操作权限。将渲染进程和操作系统隔离的这道墙就是安全沙箱。

浏览器中的安全沙箱是利用操作系统提供的安全技术,让渲染进程在执行过程中无法访问或者修改操作系统中的数据,在渲染进程需要访问系统资源的时候,需要通过浏览器内核来实现,然后将访问的结果通过 IPC 转发给渲染进程

Https是怎么使得请求更安全的?

使用证书机制(含非对称加密)

就是把公钥放入一个证书中,该证书包含服务端的信息,比如颁发者、域名、有效期,为了保证证书是可信的,需要由一个可信的第三方来对证书进行签名。这个第三方一般是证书的颁发机构,也称 CA(Certification Authority,认证中心)

证书签名就是将证书信息进行 MD5 计算,获取唯一的哈希值,然后再利用证书颁发方的私钥对其进行加密生成。

校验过程与之相反,需要用到证书颁发方的公钥对签名进行解密,然后计算证书信息的 MD5 值,将解密后的 MD5 值与计算所得的 MD5 值进行比对,如果两者一致代表签名是可信的。所以要校验签名的真伪,就需要获得证书颁发方的公钥,这个公钥就在颁发方的证书中。

上面所述的颁发证书与加密机制就是 HTTPS 的实现原理。