导图社区 Web 安全
此篇导图主要依据安全策略,xss,点击劫持,dns劫持,http劫持,中间人攻击,os命令注入等方面的内容讲述Web安全
编辑于2022-06-17 16:50:06Web 安全
XSS
概述
跨站脚本攻击 XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。
xss 分类
存储型
1、将恶意代码提交到数据库
2、数据库将其保存
3、他用户查看帖子或者评论
4、服务端返回恶意代码并被拼接到客户端页面
5、恶意代码可能通过自执行或者用户点击执行来弹出广告或者获取用户的cookie等个人隐私并上报到攻击者数据库
反射型
1.攻击者在一些链接的参数中加入恶意代码并诱导用户点击
2.用户通过点击将请求参数传入服务端
3.服务端获取参数并拼接返回给客户端
4.客户端执行恶意代码冒充用户进行权限操作或者盗取用户的cookie等个人隐私并上报攻击者数据库
DOM 型
1.攻击者构造出特殊的 URL,其中包含恶意代码。
2.用户打开带有恶意代码的 URL。
3.用户浏览器接收到响应后解析执行,前端 JavaScript 取出 URL 中的恶意代码并执行。
4.恶意代码窃取用户数据并发送到攻击者的网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定的操作。
可能对用户造成哪些攻击
1、盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
2、控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
3、盗窃企业重要的具有商业价值的资料
4、非法转账
5、强制发送电子邮件
6、网站挂马
7、控制受害者机器向其它网站发起攻击
常见业务场景
重灾区:评论区、留言区、个人信息、订单信息等 针对型:站内信、网页即时通讯、私信、意见反馈 存在风险:搜索框、当前目录、图片属性等
防御
XSS 防御的总体思路是:对用户的输入(和 URL 参数)进行过滤,对输出进行 html 编码。
CSP
设置 HTTP Header 中的 Content-Security-Policy
设置 meta 标签的
HttpOnly Cookie
预防 XSS 攻击窃取用户 cookie 最有效的防御手段
代码防御
前端渲染的时候对任何用户输入的字段都需要做 escape 转义编码,富文本的话可以使用白名单的方式。
尽量不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染。
尽量不要使用 eval, document.write(),document.writeln(),innerHTML 等可执行字符串的方法。
CSRF
概述
CSRF(Cross-site Request Forgery),即跨站请求伪造。
攻击方式
主要就是利用用户的登录状态发起跨站请求,伪造带有正确 Cookie 的 http 请求,直接绕过后台的登录验证,然后冒充用户执行一些操作
防御
前端
增加验证码,图形、短信验证码等
cookies设置 sameSite=strict, 跨站请求不会发送cookies
使用JWT(json web token)方案,token信息设置在HTTP请求头部。
get请求不对数据进行修改
后端
验证请求的referer
客户端发送请求时,把token带到http请求头,服务器验证
点击劫持
概述
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过iframe嵌套的方式潜入自己的网页中,并将iframe设置为透明,诱导用户点击。
防御
网站增加 js 代码判断 `window.top !== window` 则跳转 `window.top.location = location.href`, 如果是被iframe嵌套了则让顶层页面进行跳转, 这样就去除了嵌套页
设置 headers `X-Frame-Options`, 可通过服务器设置 response headers, 或者在 html 中设置 meta 标签
DNS 劫持
概述
DNS 劫持就是通过劫持了 DNS 服务器,通过某些手段取得某域名的解析记录控制权,进而修改此域名的解析结果. 使特定网络无法响应或返回假地址。
劫持方式
本机DNS劫持
路由DNS劫持
攻击DNS服务器
防御
加强本地计算机病毒检查,开启防火墙等
改变路由器默认密码,防止攻击者修改路由器的DNS配置指向恶意的DNS服务器
使用自己的解析服务器代替或在客户端直接以ip的形式将请求发出去,绕过运营商的DNS解析服务器,从而避免被劫持。
HTTP 劫持
概述
HTTP 请求是明文的, 容易被拦截和修改, HTTP 劫持主要是篡改请求的内容。
方式
类似DNS劫持返回302让用户浏览器跳转到另外的地址。(钓鱼网站就是这么干)
在服务器返回的HTML数据中插入js或dom节点(广告)。(比较常见)
防御
使用 HTTPS 协议加密
配置 CSP, 可防止攻击者插入的第三方外链生效
中间人攻击
概述
中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”):是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
防御
确保你访问的每个网站都使用HTTPS
不要使用公共Wi-Fi
行并更新防病毒软件
不访问浏览器警告的网站
SQL 注入
概述
通过把 SQL 命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL命令。
防御
永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等。
不要使动态拼装SQL,可以使用参数化的SQL或者直接使用存储过程进行数据查询存取。
不使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
DDOS 攻击
概述
在短时间内发起大量请求,耗尽服务器的资源,无法响应正常的访问,造成网站实质下线。
防御
增加带宽
CDN 分发: CDN 指的是网站的静态内容分发到多个服务器,用户就近访问,提高速度。因此,CDN 也是带宽扩容的一种方法,可以用来防御 DDOS 攻击。
增加token身份校验不通过拒绝访问
根据 ip 限制访问次数
OS 命令注入
概述
和 sql 攻击类似, 将未经验证的字符串传给 shell 执行程序, 造成恶意攻击
防御
避使用用户输入的内容拼接 shell 直接执行
对输入内容校验 和过滤
安全策略
CSP
概述
为了缓解很大一部分潜在的跨脚本问题,浏览器的扩展程序系统引入了内容安全策略(CSP)的一般概念;简单来说这一技术就是: 开发者明确告诉客户端(制定比较严格的策略和规则),哪些外部资源是可以加载和执行的 ,即使攻击者发现漏洞,但是它是没办法注入外部脚本的
配置方式
一种是通过 HTTP 头信息的Content-Security-Policy的字段
通过网页的<meta>标签
常见可选项
default-src script-src connect-src img-src style-src 等
同源策略(跨域)
概述
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。 同源是指: 域名、协议、端口相同。
分类
XMLHttpRequest 同源策略
如果没有 XMLHttpRequest 同源策略,那么黑客可以进行 CSRF(跨站请求伪造) 攻击:
用户登录了自己的银行页面 http://mybank.com 向用户的 cookie 中添加用户标识。
用户浏览了恶意页面 http://evil.com ,执行了页面中的恶意 AJAX 请求代码。向发起 AJAX HTTP 请求,请求会默认把对应 cookie 也同时发送过去。
银行页面从发送的 cookie 中提取用户标识,验证用户无误,response 中返回请求数据。此时数据就泄露了。 而且由于 Ajax 在后台执行,用户无法感知这一过程。
DOM 同源策略
如果没有 DOM 同源策略,也就是说不同域的 iframe 之间可以相互访问,那么黑客可以这样进行攻击:
做一个假网站,里面用 iframe 嵌套一个银行网站http://mybank.com
把 iframe 宽高啥的调整到页面全部,这样用户进来除了域名,别的部分和银行的网站没有任何差别。
这时如果用户输入账号密码,我们的主网站可以跨域访问到的 dom 节点,就可以拿到用户的账户密码了。
解决跨域
CORS(跨域资源共享)
代理与反向代理
JSONP
iframe 跨域
postMessage
document.domain
window.name 跨域
location.hash 跨域
图像 Ping 跨域
img 标签不受浏览器同源策略的影响,允许跨域引用资源。因此可以通过 img 标签的 src 属性进行跨域,这也就是图像 Ping 跨域的基本原理。
用于实现跟踪用户点击页面或动态广告曝光次数有较大的优势 比如第三方埋点
cookie 安全策略
概述
首先,cookies 是一段字符串,这一段字符串是存储在前端的浏览器中。他的容量很小只有 4k 。由于 HTTP 协议是一个无状态的协议,在进行通信的时候都需要一个身份凭证,而这个凭证就是写在了 cookie 中,这个是 cookie 最为常用的地方。
内容
一个 cookie 里面包含的信息有,域名,有效期,路径,http-only,secure,和 samesite(google chome)
特点
可跨域, http请求,会自动携带Cookie。
Cookie 应对 CSRF 攻击
方案一:放弃Cookie、使用Token!
方案二:SameSite Cookies
方案三:服务端Referer验证
Cookie 应对 XSS攻击
方案一:http-only
表示只能被http请求携带 攻击者就无法通过document.cookie得到你的cookie信息