似乎当前接受的答案中存在一个可能的安全漏洞:如果我们传递给javascript的对象的某个字符串中带有单引号,则该单引号不会被逸出
json.dumps,因此允许注入任意代码转换成javascript。最好使用Flask的
tojson()模板过滤器,请参阅docs,因为它可以对所有此类字符进行正确的转义(将它们替换为unipre代码)。
这是我的解决方案:
view.py
from flask import Flask, render_templateapp = Flask(__name__)@app.route('/')def hello_world(): user = {'firstname': "Mr.", 'lastname': "My Father's Son"} return render_template("index.html", user=user)if __name__ == '__main__': app.run()index.html
<p>Hello, <span id="username"></span></p><script> var user = JSON.parse('{{ user | tojson | safe}}'); document.getElementById('username').innerHTML = user.firstname + " " + user.lastname;</script>生成的JS看起来像:
var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Fatheru0027s Son"}');这是绝对安全的。例如,如果我们使用json.dumps-powered解决方案,我们将得到
var user = JSON.parse('{"firstname": "Mr.", "lastname": "My Father's Son"}');这在语法上是不正确的(至少可以这样说)。



