看看有哪些 Web 攻击技术.
一、前言
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 时,就会提示被盗用风险,要求用户重新登录。
四、我们能做什么?
- 输入值验证。检查数值是否符合系统业务逻辑或检查字符编码,永远不要相信用户的输入,注意不要依赖客户端验证,客户端验证的目的只是为了尽早的辨识输入错误,起到提高 UI 体验的作用(客户端验证可被修改绕过)。
- 输出值转义。比如对 HTML 标签、JavaScript 进行转义处理再输出,避免存在攻击代码。
- Web 应用不直接抛出异常,或谨慎输出错误提示,防止被攻击者利用。
- 敏感字段,比如密码,进行加 salt 加密处理,防止被暴力破解(比如常见的 彩虹表)。
- 签名认证,防止数据被篡改。客户端设置签名,服务端校验签名是否正确。
- 禁止开放重定向(Open Redirect)功能,防止被攻击者选中并用来作为钓鱼攻击的跳板。
- 涉及到登录口的地方,增加图形验证码,防止爆破机器人。
- 上线前将一些测试接口或后门程序删除,避免被攻击者利用。
- 不要将公司代码传到公共仓库。
看看有哪些 Web 攻击技术.的更多相关文章
- Web攻击技术
Web攻击技术 1.针对Web的攻击技术 1.1.在客户端即可篡改请求 在Web应用中,从浏览器那接收到的Http的全部内容,都可以在客户端自由地变更.篡改,所以Web应用可能会接收到与预期数据不相同 ...
- 图解 HTTP 笔记(八)——常见 Web 攻击技术
本章主要讲解 HTTP 通信过程中的一些常见 Web 攻击技术 一.跨站脚本攻击 跨站脚本攻击(Cross-Site Scripting, XSS)是指通过存在安全漏洞的 Web 网站注册用户的浏览器 ...
- HTTP通信安全和Web攻击技术
一.HTTPS,确保Web安全 在HTTP协议中可能存在信息窃听或身份伪装等安全问题,HTTP的不足: 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文 ...
- 前端学HTTP之web攻击技术
前面的话 简单的HTTP协议本身并不存在安全性问题,因此协议本身几乎不会成为攻击的对象.应用HTTP协议的服务器和客户端,以及运行在服务器上的Web应用等资源才是攻击目标.本文将详细介绍攻击web站点 ...
- 你所了解到的Web攻击技术
(1)XSS(Cross-Site Scripting,跨站脚本攻击):指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击.(2)SQL注入攻 ...
- 了解到的Web攻击技术
(1)XSS(Cross-Site Scripting,跨站脚本攻击): 指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或者JavaScript进行的一种攻击. (2)SQL注 ...
- web攻击技术与防护
一.跨站脚本攻击(XSS) 跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器运行非法的HTML标签或JavaScript进行的一种攻击.动态创建的HTML部分有可能隐藏着安全漏洞.就这样, ...
- Web攻击技术---OWASP top
整理OWASP top 10 部分内容,方便日后查看.想深入了解的,请移步参考中的网站. OWASP Top 10 注入 将不受信任的数据作为命令或者查询的一部分发送到解析器时,会发生诸如SQL注入. ...
- 常见Web攻击及解决方案
DoS和DDoS攻击 DoS(Denial of Service),即拒绝服务,造成远程服务器拒绝服务的行为被称为DoS攻击.其目的是使计算机或网络无法提供正常的服务.最常见的DoS攻击有计算机网络带 ...
随机推荐
- Java实现蓝桥杯 最短路
问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环).请你计算从1号点到其他点的最短路(顶点从1到n编号). 输入格式 第一行两个整数n, m. 接下来的m行,每行有三个 ...
- Java实现 LeetCode 503 下一个更大元素 II
503. 下一个更大元素 II 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大 ...
- Java实现 LeetCode 289 生命游戏
289. 生命游戏 根据百度百科,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机. 给定一个包含 m × n 个格子的面板,每一个格子都可以看成是一个细胞.每个细胞具有 ...
- Java实现 LeetCode 278 第一个错误的版本
278. 第一个错误的版本 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的. ...
- Java实现 蓝桥杯VIP 算法训练 确定元音字母位置
算法训练 确定元音字母位置 时间限制:1.0s 内存限制:512.0MB 输入一个字符串,编写程序输出该字符串中元音字母的首次出现位置,如果没有元音字母输出0.英语元音字母只有'a'.'e'.'i'. ...
- SQL server 常用的数据库 DDL语言
use (数据库名) //切换到目标数据库 if exists (select * from sysdatabases where name='数据库名') //如果括号里面是查看有没有这个数据库 d ...
- Java实现 基础算法 水仙花数
public class 水仙花数 { public static void main(String[] args) { for (int i = 100; i < 1000; i++) { i ...
- Jmeter之Json提取器详解(史上最全)
参考资料:https://www.bbsmax.com/A/D854lmBw5E/ Jsonpath在线测试:http://jsonpath.com/ 实际工作中用到的一些场景: 提取某个特定的值 提 ...
- BigDecimal的setScale常用方法(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP、ROUND_HALF_DOWN)
BigDecimal的setScale四大常用方法总结 // 设置小数点后第三位数字一大一小观察效果BigDecimal num = new BigDecimal("3.3235667&qu ...
- EIGRP-13-弥散更新算法-停滞在活动状态
如果一台路由器参与到了针对某个目的地的弥散计算中(即将相应路由置为活动状态,并发送查询包),它必须首先等待所有邻居都返回响应包,之后它才能执行自已的弥散计算,接着选出新的最优路径,最后开始发送自已的响 ...