# 浅谈网络安全--xss、csrf、csp
## 一、XSS
### 概念
跨网站指令码(英语:Cross-site scripting,通常简称为:XSS)是一种网站应用程式的安全漏洞攻击,是代码注入的一种。它允许恶意使用者将程式码注入到网页上,其他使用者在观看网页时就会受到影响。这类攻击通常包含了 HTML 以及使用者端脚本语言。
### 举例
我们知道留言板通常的任务就是把用户留言的内容展示出来。正常情况下,用户的留言都是正常的语言文字,留言板显示的内容也就没毛病。然而这个时候如果有人不按套路出牌,在留言内容中丢进去一行:
```html
```
那么留言板界面的网页代码就会变成形如以下:
```html
留言板
```
那么别的用户加载到留言板的时候,就会出现这个弹出框;
### 其他可以干的事情
攻击者当然不会仅仅弹出一个 alert 框,既然可以插入脚本,那么也可以做一些其他的事情,例如:
1、窃取网页浏览中的 cookie 值,为接下来的 CSRF 做准备
2、劫持流量实现恶意跳转
3、注入脚本获得其他信息
### 如何绕过一般网站的过滤规则
实际应用中 web 程序往往会通过一些过滤规则来组织代有恶意代码的用户输入被显示,以下是一些常用的 xss 攻击绕过过滤的一些方法:
1、大小写绕过
```
http://192.168.1.102/xss/example2.php?name=
```
2、利用过滤后返回语句再次构成攻击语句来绕过
```
http://192.168.1.102/xss/example3.php?name=pt>alert("hey!")pt>
```
发现问题了吧,这个利用原理在于只过滤了一个 script 标签。
3、并不是只有 script 标签才可以插入代码
```
http://192.168.1.102/xss/example4.php?name=
```
其他绕过方式可以参考知乎用户[Snake](https://www.zhihu.com/people/90snake)的[专栏文章](https://zhuanlan.zhihu.com/p/26177815);
### 防范手段
1、既然是代码注入攻击,那我们可以对敏感字符做转义,如下:
```js
function escape(str) {
str = str.replace(/&/g, "&");
str = str.replace(//g, ">");
str = str.replace(/"/g, "&quto;");
str = str.replace(/'/g, "#39;");
str = str.replace(/`/g, "#96;");
str = str.replace(/\//g, "#x2F;");
return str;
}
```
2、CSP(接下来会谈到)
3、过滤诸如`