---
title: 安全漏洞防护
date: 2022-11-16 15:51:30
order: 05
categories:
- 设计
- 架构
- 安全
tags:
- 架构
- 安全
- 漏洞
permalink: /pages/71e0bc17/
---
# 安全漏洞防护
## XSS
### 概念
**`跨站脚本(Cross-site scripting,通常简称为XSS)`** 是一种网站应用程序的安全漏洞攻击,是代码注入的一种。它允许恶意用户将代码注入到网页上,其他用户在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及用户端脚本语言。
XSS 攻击示例:
假如有下面一个 textbox
```html
```
value1from 是来自用户的输入,如果用户不是输入 value1from,而是输入 `"/>
```
嵌入的 JavaScript 代码将会被执行。攻击的威力,取决于用户输入了什么样的脚本。
### 攻击手段和目的
常用的 XSS 攻击手段和目的有:
- 盗用 cookie,获取敏感信息。
- 利用植入 Flash,通过 `crossdomain` 权限设置进一步获取更高权限;或者利用 Java 等得到类似的操作。
- 利用 `iframe`、`frame`、`XMLHttpRequest` 或上述 Flash 等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
- 利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
- 在访问量极大的一些页面上的 XSS 可以攻击一些小型网站,实现 DDoS 攻击的效果。
### 应对手段
- **过滤特殊字符** - 将用户所提供的内容进行过滤,从而避免 HTML 和 Jascript 代码的运行。如 `>` 转义为 `>`、`<` 转义为 `<` 等,就可以防止大部分攻击。为了避免对不必要的内容错误转移,如 `3<5` 中的 `<` 需要进行文本匹配后再转移,如:` :point_right: 参考阅读:
>
> - [Wiki 词条 - 跨站脚本](https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC)
> - [Web 安全测试之 XSS](https://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html)
## CSRF
### 概念
**`跨站请求伪造(Cross-site request forgery,CSRF)`**,也被称为 one-click attack 或者 session riding,通常缩写为 CSRF 或者 XSRF。它是一种挟持用户在当前已登录的 Web 应用程序上执行非本意的操作的攻击方法。和跨站脚本(XSS)相比,XSS 利用的是用户对指定网站的信任,CSRF 利用的是网站对用户网页浏览器的信任。
### 攻击手段和目的
可以如此理解 CSRF:攻击者盗用了你的身份,以你的名义发送恶意请求。
CSRF 能做的事太多:
- 以你名义发送邮件,发消息
- 用你的账号购买商品
- 用你的名义完成虚拟货币转账
- 泄露个人隐私
- ...
### 应对手段
- **表单 Token** - CSRF 是一个伪造用户请求的操作,所以需要构造用户请求的所有参数才可以。表单 Token 通过在请求参数中添加随机数的办法来阻止攻击者获得所有请求参数。
- **验证码** - 请求提交时,需要用户输入验证码,以避免用户在不知情的情况下被攻击者伪造请求。
- **Referer check** - HTTP 请求头的 Referer 域中记录着请求资源,可通过检查请求来源,验证其是否合法。
> :point_right: 参考阅读:
>
> - [Wiki 词条 - 跨站请求伪造](https://zh.wikipedia.org/wiki/%E8%B7%A8%E7%AB%99%E8%AF%B7%E6%B1%82%E4%BC%AA%E9%80%A0)
> - [浅谈 CSRF 攻击方式](http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html)
> - [“每日一题”CSRF 是什么?](https://zhuanlan.zhihu.com/p/22521378)[“每日一题”CSRF 是什么?](https://zhuanlan.zhihu.com/p/22521378)
> - [WEB 安全之-CSRF(跨站请求伪造)](https://www.jianshu.com/p/855395f9603b)
## SQL 注入
### 概念
**`SQL 注入攻击(SQL injection)`**,是发生于应用程序之数据层的安全漏洞。简而言之,是在输入的字符串之中注入 SQL 指令,在设计不良的程序当中忽略了检查,那么这些注入进去的指令就会被数据库服务器误认为是正常的 SQL 指令而运行,因此遭到破坏或是入侵。
攻击示例:
考虑以下简单的登录表单:
```html