Flask jsonify:如何逃避角色

时间:2014-12-09 00:06:50

标签: python json flask xss

我刚刚开始使用Flask Web框架。我目前正在编写一个端点,返回可能包含恶意javascript的JSON位。

例如:

@api.route("/tester")
def api_jobs_tester():
    return jsonify({
        "name": "<script>alert(1)</script>"
    })

在此示例中,返回:

{
  "name": "<script>alert(1)</script>"
}

然而,理想情况下,我希望这回事:

{
  "name": "&lt;script&gt;alert(1)&lt;/script&gt;"
}

当然,对于每个值,这是直接的,只需:

return jsonify({
    "name": escape("<script>alert(1)</script>")
})

但是,我可能需要返回比这更复杂的JSON响应,其中我不一定知道JSON的结构。

我可能会扮演我自己的遍历JSON树的函数并转义所有字符串,但我更喜欢这种内置方式。

使用Flask转义JSON响应中的值的最简单方法是什么?

1 个答案:

答案 0 :(得分:5)

jsonify 函数避免了转义的选项。但是你可以使用flask.json中的 htmlsafe_dumps 函数:

from flask import json, jsonify

return jsonify(**json.loads(json.htmlsafe_dumps(obj)))