代码之家  ›  专栏  ›  技术社区  ›  Kristoffer

XSS保护jsonify输出的最佳方法

  •  -1
  • Kristoffer  · 技术社区  · 6 年前

    通过以下哪种方式来防止XSS攻击 jsonify() 在蟒蛇瓶里?

    testvar = {0: {'Name': 'df',
      'test1': 'sdf',
      'test2': 'sdf'},
     1: {'Name': 'dfdf',
      'test1': 'sdf',
      'test2': 'dfdf'},
     2: {'Name': 'dfdf',
      'test1': 'dfdfd',
      'test2': 'dfdfd<script>alert("test");</script>'}}
    
    @app.route("/test")
    def test():
        return jsonify(testvar)
    

    这是Javascript:

    output_body = ""
    $.getJSON('/test',function(data){
        $.each(data, function(key,val){
            output_body += "<tr>"
                for(property in val) {
                    output_body += "<td>" + val[property] + "</td>"
                }
                output_body += "</tr>"
         });
    $('table').html(output_body);
    });
    

    此代码执行一个js警报框。

    当然,我可以通过转义<和>。但是在上面的例子中,有没有一个好的方法来防止XSS攻击呢?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Tohmaxxx    6 年前

    你可以用漂白剂 https://bleach.readthedocs.io/en/latest/clean.html

    或者您可以使用更好的javascript前端(例如react)来显示输出(现代js框架默认不使用这种类型的东西)