XSS保护jsonify输出的最佳方法

时间:2018-09-24 13:08:21

标签: python flask

哪种方法是通过python Flask中的jsonify()保护XSS攻击的最佳方法?

这是Python(Flask)文件:

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警报框。

我当然可以通过转义<和>来清除js中的数据。但是在上面的示例中,有没有一种好的方法可以防止XSS攻击?

1 个答案:

答案 0 :(得分:1)

您可以对此https://bleach.readthedocs.io/en/latest/clean.html使用漂白剂:遍历所有项目并将bleach.clean应用于它们,然后将经过清理的字典作为json返回。

或者您可以使用更好的javascript前端(例如react)来显示输出(默认情况下,现代js框架会转义此类内容)