Skip to content

Web 安全专题 #38

@coconilu

Description

@coconilu

概述

Web 安全不可谓不重要。附一张思维导图:
default

XSS

1. 描述

XSS (Cross Site Script)是一个术语,用来描述一类允许攻击者通过网站将客户端脚本代码注入到其他用户的浏览器中的攻击手段。主要分两种:

1. 反射型XSS

本质:

带有恶意代码的URL被打开时,恶意代码被浏览器解析、执行。

经典场景:

网页脚本会渲染URL的某一段,而攻击者会在URL上放入一段攻击代码。比如攻击者会发邮件诱导你点击,当你访问的时候,攻击代码会被顺利执行。

措施:
  1. Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端。
  2. 尽量不要从 URL,document.referrerdocument.forms 等这种 DOM API 中获取数据直接渲染。
  3. 尽量不要使用 eval, new Function()document.write()document.writeln()window.setInterval()window.setTimeout()innerHTMLdocument.creteElement() 等可执行字符串的方法。
  4. 如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义。
  5. 前端渲染的时候对任何的字段都需要做 escape 转义编码。

概况起来就是,1. 不要从敏感地方获取渲染资源,2. 转义编码。

escape()除了 ASCII 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

2. 持久型XSS

本质:

恶意代码被攻击者顺利提交到服务器,服务器把攻击代码返回给受害者。

经典场景:

攻击者经过论坛提交表单内容(带有攻击代码)到服务器,但是没有经过安全过滤,顺利存储到服务器上,当另一用户访问论坛,服务器返回的内容中包含攻击代码,受害者顺利被攻击。

措施:
  1. 后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理。
  2. 后端在输出给前端数据统一进行转义处理。
  3. 前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理。

3. 基于字符集的XSS

本质:浏览器在meta没有指定 charset 字符集的时候有自动识别编码的机制。而攻击代码可以通过罕见的字符编码躲避转义编码。
措施:
  1. 指定<meta charset="utf-8">

CSRF

1. 描述

CSRF(Cross-Site Request Forgery),跨站请求伪造攻击。攻击者在用户不知情的情况下利用其身份信息执行操作。
完成CSRF攻击需要具备三个条件:

  1. 用户已经登录了站点 A,并在本地记录了 cookie
  2. 在用户没有登出站点 A 的情况下(也就是 cookie 生效的情况下),访问了恶意攻击者提供的引诱危险站点 B (B 站点要求访问站点A)
  3. 站点 A 没有做任何 CSRF 防御

2. 措施

在服务器端要求每个 POST 请求都包含一个用户特定的由站点生成的密钥( 这个密钥值可以由服务器在发送用来传输数据的网页表单时提供)。

SQL注入

1. 描述

SQL 注入漏洞使得攻击者能够通过在数据库上执行任意SQL代码,从而允许访问、修改或删除数据,而不管该用户的权限如何。

2. 典型案例

用户登录名设置成xxx ' OR 1 = 1 --,如果没有做校验的话,下次用户可以不用登录密码就可以登录了。

3. 措施

  1. 对进入数据库的特殊字符(',",\,<,>,&,*,; 等)进行转义处理,或编码转换。
  2. 后端代码检查输入的数据是否符合预期
  3. 所有的查询语句建议使用数据库提供的参数化查询接口
  4. 严格限制Web应用的数据库的操作权限

命令行注入

1. 描述

本质上就是服务器可以接受用户传入的数据,并作为执行命令行的参数。

2. 措施

  1. 后端对前端提交内容需要完全选择不相信,并且对其进行规则限制
  2. 在调用系统命令前对所有传入参数进行命令行参数转义过滤
  3. 不要直接拼接命令语句,借助一些工具做拼接、转义预处理

DDoS攻击

学名叫分布式拒绝服务(DDoS:Distributed Denial of Service)。

本质上就是利用大量的请求造成资源过载,导致服务不可用。

1. 网络层 DDoS

针对TCP / UDP协议原理进行的攻击。

2. 应用层 DDoS

主要针对TCP成功握手后,DNS和HTTP协议攻击。

流量劫持

本质上就是,攻击者操控用户的网络请求还有返回给用户的网络响应。

1. DNS 劫持

攻击者把用户导向虚假的网站。

2. HTTP 劫持

攻击者截获用户的网络响应结果,并篡改其中的内容。

方案

使用HTTPS就可以解决流量劫持的问题。

服务器漏洞

主要跟服务器系统的健壮性有关。主要包括目录遍历漏洞、物理路径泄漏、源码暴露漏洞。

参考

书籍

《Web前端 黑客技术解密》

链接

MDN的网站安全
常见Web安全攻防总结

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions