网络安全
2020-09-17 14:17:28 0 举报
AI智能生成
网络安全 脑图
作者其他创作
大纲/内容
XSS
全称
跨站脚本攻击
Cross Site Scripting
Cross Site Scripting
定义
通过存在安全漏洞的web网站注册用户的浏览器内运行非法的非本站点HTML标签或JavaScript进行的一种攻击
分类
反射型
url参数直接注入
http://localhost:8080/?from=<script>alert(3)</script>
存储型
存储到DB后读取时注入
危害
Scripting能干啥就能干啥
获取页面数据
获取Cookies
防御
HEAD
添加X-XSS-Protection头字段
ctx.set('X-XSS-Protection', 0)
Chromium 已弃用
ctx.set('X-XSS-Protection', 0)
Chromium 已弃用
0 禁止XSS过滤
1 启用XSS过滤(默认)
检测到XSS,浏览器将清除页面(删除不安全部分)
检测到XSS,浏览器将清除页面(删除不安全部分)
mode=block
如果检测到攻击,浏览器将不清除页面,而是组织页面加载
report=<report-uri> Chromium only
如果检测到攻击,浏览器将清除页面并使用CSP report-uri 指令发送违规报告
CSP
内容安全策略
Content Security Policy
Content Security Policy
CSP是一个附加的安全层,用于帮助检测和缓解某些类型的攻击
本质就是建立白名单
开发者明确告诉浏览器哪些外部资源可以加载和执行
开发者明确告诉浏览器哪些外部资源可以加载和执行
只允许加载本站资源 Content-Security-Policy: default-src 'self'
只允许加载HTTPS协议图片 Content-Security-Policy: img-src hrrps://*
不允许加载任何来源框架 Content-Security-Policy: child-src 'none'
转义字符
对于引号、尖括号、斜杠进行转义
绕过方式
将XSS语句转换成16进制,每个字符前加上转移符'\'
\x3C\x73\x63\x72\x69\x70\x74\x3E\x61\x6C\x65\x72\x74\x28\x27\x70\x6F\x72\x75\x69\x6E\x27\x29\x3C\x2F\x73\x63\x72\x69\x70\x74\x3E
在js中上述字符会被还原为<script>alert('poruin')</script>
在js中上述字符会被还原为<script>alert('poruin')</script>
黑名单
用户的输入用不可信
转义输入输出的内容,对于引号、尖括号、斜杠进行转义
转义输入输出的内容,对于引号、尖括号、斜杠进行转义
function escape(str) {
str = str.replace(/&/g, '&')
str = str.replace(/</g, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(/\//g, '/')
return str
}
str = str.replace(/&/g, '&')
str = str.replace(/</g, '<')
str = str.replace(/>/g, '>')
str = str.replace(/"/g, '&quto;')
str = str.replace(/'/g, ''')
str = str.replace(/`/g, '`')
str = str.replace(/\//g, '/')
return str
}
缺点
对于富文本来说,显然不能通过上面的办法来转义所有字符,因为这样会把需要的格式也过滤掉。对
于这种情况,通常采用白名单过滤的办法。
于这种情况,通常采用白名单过滤的办法。
白名单
定义好安全无害的标签
一般基于已有库,例如xss库
const xss = require('xss')
HttpOnly Cookie
这是预防XSS攻击窃取用户cookie最有效的防御手段。Web应 用程序在设置cookie时,将其
属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户
cookie信息。
属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户
cookie信息。
response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly")
CSRF
全称
跨站请求伪造
Cross Site Request Forgery
Cross Site Request Forgery
定义
利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法操作
手段
用户已经登录了站点 A,并在本地记录了 cookie
在用户没有登出站点 A 的情况下(也就是 cookie 生效的情况下),访问了恶意攻击者提供的引诱
危险站点 B (B 站点要求访问站点A)
危险站点 B (B 站点要求访问站点A)
站点 A 没有做任何 CSRF 防御
危害
利用用户登录态
用户不知情
完成业务请求
盗取用户资金(转账,消费)
冒充用户发帖背锅
损害网站声誉
用户不知情
完成业务请求
盗取用户资金(转账,消费)
冒充用户发帖背锅
损害网站声誉
防御
禁止第三方网站带Cookie
有兼容性问题
Referer Check
Https不发送referer,所以不是很有效
验证码
人机判断(人机图形验证码)+短信
目前最有效的方式
Cookie进行hash
服务端动态的发送一些内容,比如伪随机数
用户提交的时候将动态内容一并提交
用户提交的时候将动态内容一并提交
点击劫持
clickjacking
clickjacking
定义
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,
并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
防御
X-FRAME-OPTIONS
X-FRAME-OPTIONS 是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就
是为了防御用 iframe 嵌套的点击劫持攻击。
是为了防御用 iframe 嵌套的点击劫持攻击。
ctx.set('X-FRAME-OPTIONS', 'DENY')
DENY,表示页面不允许通过 iframe 的方式展示
SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示
ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示
JS方式
<script>
// self是对当前窗口自身的引用
// top返回顶层窗口
if (self == top) {
var style = document.getElementById('click-jack')
document.body.removeChild(style)
} else {
top.location = self.location
}
</script>
// self是对当前窗口自身的引用
// top返回顶层窗口
if (self == top) {
var style = document.getElementById('click-jack')
document.body.removeChild(style)
} else {
top.location = self.location
}
</script>
SQL注入
定义
针对程序员编写时的疏忽(SQL是靠语句拼接实现),通过SQL语句,实现无账号登录,甚至篡改数据库。
手段
寻找到SQL注入的位置
判断服务器类型和后台数据库类型
针对不同的服务器和数据库特点进行SQL注入攻击
防御
所有的查询语句建议使用数据库提供的参数化查询接口**,参数化的语句使用参数而不是将用户
输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query
方法中的 ? 占位参数。
输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query
方法中的 ? 占位参数。
严格限制Web应用的数据库的操作权限**,给此用户提供仅仅能够满足其工作的最低权限,从而
最大限度的减少注入攻击对数据库的危害
最大限度的减少注入攻击对数据库的危害
后端代码检查输入的数据是否符合预期**,严格限制变量的类型,例如使用正则表达式进行一些
匹配处理。
匹配处理。
对进入数据库的特殊字符(',",\,<,>,&,*,; 等)进行转义处理,或编码转换**。基本上
所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar
库。
所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar
库。
OS注入
定义
OS命令注入和SQL注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的。OS命令注
入攻击指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在
被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。
入攻击指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在
被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。
请求劫持
分类
DNS劫持
DNS服务器(DNS解析各个步骤)被篡改,修改了域名解析的结果,
使得访问到的不是预期的ip
使得访问到的不是预期的ip
HTTP劫持
运营商劫持,此时大概只能升级HTTPS了
DDOS
全称
拒绝访问攻击
distributed denial of service
distributed denial of service
定义
DDOS 不是一种攻击,而是一大类攻击的总称。它有几十种类型,新的攻击方法还在不断发明出来。网
站运行的各个环节,都可以是攻击目标。只要把一个环节攻破,使得整个流程跑不起来,就达到了瘫痪
服务的目的。
站运行的各个环节,都可以是攻击目标。只要把一个环节攻破,使得整个流程跑不起来,就达到了瘫痪
服务的目的。
比较常见的一种攻击是 cc 攻击。它就是简单粗暴地送来大量正常的请求,超出服务器的最大承
受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界大概20多个 IP 地址轮流发出请求,每个地
址的请求量在每秒200次~300次。我看访问日志的时候,就觉得那些请求像洪水一样涌来,一眨眼就是
一大堆,几分钟的时间,日志文件的体积就大了100MB。说实话,这只能算小攻击,但是我的个人网站
没有任何防护,服务器还是跟其他人共享的,这种流量一来立刻就下线了。
受量,导致宕机。我遭遇的就是 cc 攻击,最多的时候全世界大概20多个 IP 地址轮流发出请求,每个地
址的请求量在每秒200次~300次。我看访问日志的时候,就觉得那些请求像洪水一样涌来,一眨眼就是
一大堆,几分钟的时间,日志文件的体积就大了100MB。说实话,这只能算小攻击,但是我的个人网站
没有任何防护,服务器还是跟其他人共享的,这种流量一来立刻就下线了。
分类
SYN Flood
此攻击通过向目标发送具有欺骗性源IP地址的大量TCP“初始连接请求”SYN数据包来利用TCP握
手。目标机器响应每个连接请求,然后等待握手中的最后一步,这一步从未发生过,耗尽了进程
中的目标资源
手。目标机器响应每个连接请求,然后等待握手中的最后一步,这一步从未发生过,耗尽了进程
中的目标资源
HTTP Flood
此攻击类似于同时在多个不同计算机上反复按Web浏览器中的刷新 - 大量HTTP请求泛滥服务器,
导致拒绝服务
导致拒绝服务
防御
备份网站
备份网站不一定是全功能的,如果能做到全静态浏览,就能满足需求。最低限度应该可以显示公告,告诉
用户,网站出了问题,正在全力抢修。
用户,网站出了问题,正在全力抢修。
HTTP请求的拦截
高防IP
靠谱的运营商
多个 Docker
硬件
服务器
防火墙
带宽扩容 + CDN
提高犯罪成本
中间人攻击
定义
中间人攻击是攻击方同时与服务端和客户端建立起了连接,并让对方认为连接是安全的,但是实际上整个通信过程都被攻击者控制了。攻击者不仅能获得双方的通信信息,还能修改通信信息。
防御
不建议使用公共的 Wi-Fi
在通信的过程中涉及到了某些敏感信息,就完全暴露给攻击方了
增加一个安全通道来传输信息
HTTPS 就可以用来防御中间人攻击,但是并不是说使用了 HTTPS 就可以高枕无忧了,因为如果你没有完全关闭 HTTP 访问的话,攻击方可以通过某些方式将 HTTPS 降级为 HTTP 从而实现中间人攻击。
0 条评论
下一页