一、前言

HTTP 协议具有无状态、不连接、尽最大努力的特点,对于 Web 网站的攻击基本也是针对 HTTP 协议的这些特点进行的。比如无状态的特点,就要求开发者需要自行设计开发"认证"和"会话管理"功能来满足 Web 应用的安全,而形形色色的自行实现,也为用户会话劫持、SQL 注入等攻击埋下了风险;而不连接的特点表示客户端可以肆意的修改 HTTP 的请求内容,而服务端可能会接收到与预期数据不相同的内容。

Web 漏洞中,逻辑漏洞占比最大,逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑不能够正常处理或处理错误,一般出现在支付金额、越权访问、信息查询、登陆认证等地方。逻辑漏洞很大的一部分原因是因为对代码的不够认真和对客户的过于信任,比如返回数据中包含用户敏感信息、登录认证存在撞库风险等

技术漏洞攻击指的是用户通过一定的技术手段,利用攻击代码达到自己非法获取信息、身份伪装等目的。技术漏洞攻击可以分为主动攻击和被动攻击。

主动攻击(active attack)是指攻击者通过直接访问 Web 应用,把攻击代码植入的攻击模式。具有代表性的攻击是 SQL 注入攻击和 OS 命令注入攻击。

被动攻击(passive attack)是指利用圈套策略执行攻击代码的攻击模式,比如利用钓鱼网站诱使用户点击等。具有代表性的攻击是跨站脚本攻击(XSS)和跨站点请求伪造(CSRF)。

二、主动攻击

1. SQL 注入

SQL注入(SQL Injection) 是指针对 Web 应用使用的数据库,通过运行非法的 SQL 而产生的攻击。简单点来说,就是通过表单输入的内容,诱使服务器拼接成一个非法的 SQL。比如有一个正常的 SQL 语句如下:

SELECT * FROM user WHERE name='张三' and password = '123456'

正常情况下,用户输入用户名“张三”和密码“123456”(正常来说,密码要 MD5 加密处理)完成认证过程。

假设用户名输入的用户名是“张三'--”,我们来看看 SQL 会变成啥样?SQL 语句中的 -- 之后全视为注释,用户就成功绕过了认证。

SELECT * FROM user WHERE name='张三'--' and password = '666666'

常见的预防 SQL 注入的手段就是 SQL 语句预编译处理。

2. OS 命令注入攻击

OS 命令注入攻击(OS Command Injection)是指通过 Web 应用,执行非法的操作系统命令达到攻击的目的。OS 命令注入攻击可以向 Shell 发送命令,让 Windows 或 Linux 操作系统的命令行启动程序。也就是说,通过 OS 注入攻击可执行 OS 上安装着的各种程序。

OS 命令注入和 SQL 注入类似,SQL 注入伪造的是非法 SQL,OS 命令注入伪造的是非法 shell 命令。

常见的预防 OS 注入的手段是对 shell 执行的符号进行转码替换(比如 &&、&、| 等)。

3. Dos 攻击

DoS 攻击(Denial of Service attack)是一种让运行中的服务呈停止状态的攻击。有时也叫做服务停止攻击或拒绝服务攻击。DoS 攻击的对象不仅限于 Web 网站,还包括网络设备及服务器等。

Dos 攻击简单点理解就是发送大量的合法请求,造成服务器资源过载耗尽,从而使服务器停止服务。(由于服务器很难分辨何为正常请求,何为攻击请求,因此很难防止 DoS 攻击。)

Dos 攻击还可通过攻击安全漏洞使服务停止。

三、被动攻击

1. XSS 攻击

跨站脚本攻击(Cross-Site Scripting, XSS)是指通过在用户的浏览器内运行非法的 HTML 标签或 JavaScript 向存在安全漏洞的 Web 网站进行的一种攻击。攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

常见的 XSS 攻击比如虚假输入表单骗取用户个人信息、窃取用户 Cookie 发送恶意请求 等。

常见的预防 XSS 攻击的手段比如对 HTML 标签、JavaScript 进行转义处理、禁止 JavaScript 读取 Cookie 等。

2. CSRF 攻击

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新。

常见的预防 CSRF 攻击的手段比如:验证 Referer + POST 提交、增加 token 认证等。

3. HTTP 首部注入攻击

HTTP 首部注入攻击(HTTP Header Injection)是指攻击者通过在响应首部字段内插入换行,添加任意响应首部或主体的一种攻击。比如重定向至任意的 URL、替换掉要返回的主体内容等。

比如存在某个需要重定向的页面,本来的 header 信息是这个样子的:

Location: http://example.com/?cat=101

因为重定向需要带回参数,攻击者就诱使用户在参数中加入攻击代码 —— 加入或替换任意的 header 信息。(下面这个 Location 可能不会生效,不同的浏览器对重复的 header 字段有不同的处理方式)

Location: http://example.com/?cat=101(%0D%0A:换行符)
Location: http://xxx.com

4. 会话劫持攻击

会话劫持(Session Hijack)攻击是指攻击者通过某种手段拿到了用户的会话 ID,并非法使用此会话 ID 伪装成用户,达到攻击的目的。

常见的预防会话劫持的手段比如:将会话 ID 和用户设备信息绑定在一起,当用户在其他设备上使用该会话 ID 时,就会提示被盗用风险,要求用户重新登录。

四、我们能做什么?

  1. 输入值验证。检查数值是否符合系统业务逻辑或检查字符编码,永远不要相信用户的输入,注意不要依赖客户端验证,客户端验证的目的只是为了尽早的辨识输入错误,起到提高 UI 体验的作用(客户端验证可被修改绕过)。
  2. 输出值转义。比如对 HTML 标签、JavaScript 进行转义处理再输出,避免存在攻击代码。
  3. Web 应用不直接抛出异常,或谨慎输出错误提示,防止被攻击者利用。
  4. 敏感字段,比如密码,进行加 salt 加密处理,防止被暴力破解(比如常见的 彩虹表)。
  5. 签名认证,防止数据被篡改。客户端设置签名,服务端校验签名是否正确。
  6. 禁止开放重定向(Open Redirect)功能,防止被攻击者选中并用来作为钓鱼攻击的跳板。
  7. 涉及到登录口的地方,增加图形验证码,防止爆破机器人。
  8. 上线前将一些测试接口或后门程序删除,避免被攻击者利用。
  9. 不要将公司代码传到公共仓库。

看看有哪些 Web 攻击技术.的更多相关文章

  1. Web攻击技术

    Web攻击技术 1.针对Web的攻击技术 1.1.在客户端即可篡改请求 在Web应用中,从浏览器那接收到的Http的全部内容,都可以在客户端自由地变更.篡改,所以Web应用可能会接收到与预期数据不相同 ...

  2. 图解 HTTP 笔记(八)——常见 Web 攻击技术

    本章主要讲解 HTTP 通信过程中的一些常见 Web 攻击技术 一.跨站脚本攻击 跨站脚本攻击(Cross-Site Scripting, XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器 ...

  3. HTTP通信安全和Web攻击技术

    一.HTTPS,确保Web安全 在HTTP协议中可能存在信息窃听或身份伪装等安全问题,HTTP的不足: 通信使用明文(不加密),内容可能会被窃听  不验证通信方的身份,因此有可能遭遇伪装 无法证明报文 ...

  4. 前端学HTTP之web攻击技术

    前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标.本文将详细介绍攻击web站点 ...

  5. 你所了解到的Web攻击技术

    (1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击.(2)SQL注入攻 ...

  6. 了解到的Web攻击技术

    (1)XSS(Cross-Site Scripting,跨站脚本攻击): 指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击. (2)SQL注 ...

  7. web攻击技术与防护

    一.跨站脚本攻击(XSS) 跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器运行非法的HTML标签或JavaScript进行的一种攻击.动态创建的HTML部分有可能隐藏着安全漏洞.就这样, ...

  8. Web攻击技术---OWASP top

    整理OWASP top 10 部分内容,方便日后查看.想深入了解的,请移步参考中的网站. OWASP Top 10 注入 将不受信任的数据作为命令或者查询的一部分发送到解析器时,会发生诸如SQL注入. ...

  9. 常见Web攻击及解决方案

    DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...

随机推荐

  1. Java实现 LeetCode 787 K 站中转内最便宜的航班(两种DP)

    787. K 站中转内最便宜的航班 有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是 ...

  2. Java实现 LeetCode 289 生命游戏

    289. 生命游戏 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有 ...

  3. Java实现 洛谷 P1328 生活大爆炸版石头剪刀布

    import java.util.Scanner; public class Main{ private static int[] duel(int playerA, int playerB){ in ...

  4. java实现洛谷P3376【模板】网络最大流

    题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入格式 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行包含三个正整数u ...

  5. Java实现第十届蓝桥杯外卖店优先级

    试题 G: 外卖店优先级 时间限制: 1.0s 内存限制: 512.0MB 本题总分:20 分 [问题描述] "饱了么"外卖系统中维护着 N 家外卖店,编号 1 ∼ N.每家外卖店 ...

  6. 团体天梯赛L1-041.寻找250

    对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字. 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”. ...

  7. 关于VMware虚拟机启动EFI/UEFI支持

    作为较新计算机和操作系统用于引导计算机的技术,可扩展固件接口 (EFI) 正在取代 BIOS.EFI 有时称为统一可扩展固件接口 (UEFI). 使用VMware创建虚拟机,默认还是会使用传统的BIO ...

  8. 哪些年,我们玩过的Git

    作者:玩世不恭的Coder公众号:玩世不恭的Coder时间:2020-06-05说明:本文为原创文章,未经允许不可转载,转载前请联系作者 哪些年,我们玩过的Git 前言一.前期工作常用基本概念的理解G ...

  9. 给Linux小白的CentOS8.1基本安装说明

    写在前面的话:用过Linux的同学应该都会觉得Linux安装是件非常简单的事情,根本不值得用博客记下来!但是我发现,其实没接触过Linux的同学还真不一定会装,就像在IT行业工作过几年但一直用Wind ...

  10. iOS-NSString常见方法

    </pre><pre name="code" class="html">#import <Foundation/Foundatio ...