Flask jsonify: cómo escapar de los personajes

Acabo de empezar a trabajar con el framework web de Flask. Actualmente estoy escribiendo un punto final que devuelve bits de JSON que muy bien pueden contener JavaScript malicioso.

Por ejemplo:

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

En este ejemplo, esto devuelve:

 { "name": "alert(1)" } 

Idealmente, sin embargo, me gustaría que esto vuelva:

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

Por supuesto, esto es sencillo de hacer en base a cada valor, con solo:

 return jsonify({ "name": escape("alert(1)") }) 

Sin embargo, es posible que deba devolver respuestas JSON mucho más complejas que esta, en las que no necesariamente conozco de antemano la estructura del JSON.

Probablemente podría desempeñar mi propia función que atraviesa el árbol JSON y escapa a todas las cadenas, pero preferiría una forma integrada de hacer esto.

¿Cuál es la forma más fácil de escapar de los valores en una respuesta JSON utilizando Flask?

La función jsonify no tiene opción para escapar. Pero hay una función htmlsafe_dumps en flask.json que puedes usar:

 from flask import json, jsonify return jsonify(**json.loads(json.htmlsafe_dumps(obj)))