Flask jsonify:如何逃避角色

the*_*ica 1 python xss json flask

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

例如:

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

在此示例中,返回:

{
  "name": "<script>alert(1)</script>"
}
Run Code Online (Sandbox Code Playgroud)

但是,理想情况下,我希望返回:

{
  "name": "&lt;script&gt;alert(1)&lt;/script&gt;"
}
Run Code Online (Sandbox Code Playgroud)

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

return jsonify({
    "name": escape("<script>alert(1)</script>")
})
Run Code Online (Sandbox Code Playgroud)

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

我可能可以扮演我自己的遍历JSON树的函数并转义所有字符串,但我更喜欢内置的方法.

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

Eug*_*tov 5

jsonify函数没有转义选项.但是你可以使用flask.json中的htmlsafe_dumps函数:

from flask import json, jsonify

return jsonify(**json.loads(json.htmlsafe_dumps(obj)))
Run Code Online (Sandbox Code Playgroud)