码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • xss漏洞及排查


    xss漏洞

    举个例子说明,假设server端有这么一个rest接口(我们用flask实现):

    @app.route('/test')
    def hello_world():
        name = request.args.get('name')
        return 'hello, %s' % (name)
    
    • 1
    • 2
    • 3
    • 4

    它直接返回前端输入的名字。那我们就可以构造如下url造成xss攻击:

    http://localhost:8013/test?name=%3Cscript%3Ealert(document.domain);%3C/script%3E
    
    • 1

    name为:

    
    
    • 1

    界面会弹出domain域的对话框。

    上述攻击是后端将前端的输入未做任何处理,直接返回到web界面上造成,称之为反射型xss。

    还有一种存储型xss,后端对前端输入未做处理,存到数据库中。后续每个用户来访问页面,数据库的数据都会加载到界面上,从而形成xss攻击。

    这两种xss,客观上形成了一种动态页面或非法链接,造成浏览器解释非法脚本。

    xss的影响很大,试想,上述链接如果是银行系统的一个url,且存在反射型xss漏洞,黑客将该链接以钓鱼邮件的方式发送给某人,某人一看url是合法的,点进去,可能直接就把自己的登录cookie交出去了。黑客拿到cookie,基本上相当于免密登录那人的银行系统。

    参考该文。

    漏洞排查

    要分前后端排查。

    前端,如果使用的是vue框架,要关注v-html、v-bind:action、v-bind:href等指令,因这些指令可能指向由用户控制的变量,黑客就可以构造如下输入造成xss攻击:

    javascript:alert(document.domain);
    
    
    ;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    后台,可以使用Filter,对部分rest请求的响应做xss防护,主要是对一些特殊字符的处理,比如:

    <、>、src、