Web 安全 | 青训营笔记

100 阅读5分钟

这是我参与「第四届青训营 」笔记创作活动的第2天

image.png

Web的初始目的是提供快捷服务和直接访问,所以早期的Web没有考虑安全性问题。随着Web广泛应用,Internet中与Web相关的安全事故正成为目前所有事故的主要组成部分.由图中可见,与Web安全有关的网页恶意代码和网站篡改事件占据了所有事件的大部,Web安全面临严重问题。所以接下来我们将从攻击者来谈谈 Web 安全的问题

一、XSS 注入

跨站脚本攻击(XSS),是最普遍的Web应用安全漏洞。这类漏洞能够使得攻击者嵌入恶意脚本代码到正常用户会访问到的页面中,当正常用户访问该页面时,则可导致嵌入的恶意脚本代码的执行,从而达到恶意攻击用户的目的。

XSS 分类

  1. 反射性 XSS

    攻击者构造好get请求参数,将带有恶意参数的链接发给受害者,诱使受害人点击后,服务器接收到受害人的请求并处理,然后把恶意XSS代码发送到受害人的浏览器,浏览器解析这段代码后就会触发XSS攻击,完成攻击者想要的功能(获取cookie、url、浏览器信息、IP等)。

  2. 存储型 XSS

    存储型XSS又称为永久性XSS攻击,常见于留言板、博客、论坛。攻击恶意脚本会被存放进数据库,以至于每次访问浏览器,数据库都会将恶意代码查询发给浏览器,继而触发存储型XSS漏洞。

  3. DOM型 XSS

    DOM型XSS不与后台服务器进行交互,是一种通过dom操作前端代码输出的时候产生的问题,实际上也属于一次性反射型XSS。挖掘dom型XSS就不能看源代码了,而需要看网页元素信息中的JS代码,理清代码逻辑

举例

下面例子当中,在请求 /submit 接口时,用户提交了一段 HTML 代码,由于服务器端并未对次代码做校验,从而使得攻击者能够直接上传恶意脚本,从而实现 xss 注入

image.png

下面例子当中,在noscript标签当中嵌套一层p标签,在p标签的title属性当中再次结束noscript,并且在加上一个img标签,看似没有啥问题,但是在经过浏览器解析之后就会不一样了

image.png

经过浏览器解析,将呈现如下 dom 结构,浏览器会单独下渲染 img 标签,但是 img 的scr属性上的图片链接肯定会展示失败,从而触发 img 标签的 onerror 事件,从而完成 xss 注入

image.png

二、CSRF 跨站伪造

跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种使已登录用户在不知情的情况下执行非本意的操作的攻击方法。因为攻击者看不到伪造请求的响应结果,所以CSRF攻击主要用来执行动作,而非窃取用户数据。当受害者是一个普通用户时,CSRF可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时CSRF则可能威胁到整个Web系统的安全

特点: 在用户不知情的前提下,利用用户权限(cookie),构造指定HTTP请求,窃取或修改用户敏感信息

举例:

下面例子当中,该img元素在页面处于一个隐藏状态,但是它的scr属性是一个网站地址,但是img元素是不可见的,从而攻击者可以引诱用户进行点击,比如一个抽奖按钮等等,当前用户点击之后,从而攻击者就可以获取到用户的一些敏感信息等 image.png

三、Injection 注入攻击

3.1 SQL 注入

攻击者会在请求参数当中,恶意注入 SQL 参数,从而当执行sql时,就会获取到一些隐私信息等

image.png

举例:

下面例子当中,直接读取请求字段,并且直接进行字符串拼接,这样当攻击者传入恶意 SQL 那么那段 sql将会被执行,就会呈现如下后果,从而造成严重的后果

image.png

image.png

image.png

当然 注入攻击 远不止sql这么简单,也会有 shell 脚本注入等

四、Dos 攻击

通过某种方式(构造特定请求),导致服务器资源被显著消耗,来不及响应更多请求,导致请求挤压服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。也就是流量攻击,大量流量一次涌入造成服务器不能完全响应,导致服务器宕机。

总结

  • 对安全性要求比较高的服务必须要用加密协议(HTTPS)。
  • 用户输入部分通常需要转义,避免通过注入的恶意代码进行攻击
  • 不能单纯通过cookie来校验用户身份,可以把一部分验证信息放在请求报文的header里面。
  • 不能将用户提交的数据直接拼接sql语句,需要对用户提交的数据进行转义。
  • 存储数据库密码不能进行明文存储,需要进行加密存储