1. 模板中的转义
Tornado 使用模板引擎来渲染 HTML 内容,而在模板中,自动进行 HTML 转义是一个重要的安全机制。在 Tornado 模板中,可以使用 {{! ... }} 进行手动转义,或者使用 autoescape 设置来自动转义。
手动转义:
<p>{{! some_untrusted_html }}</p>
自动转义:
class MyHandler(tornado.web.RequestHandler):
def get(self):
self.render("template.html", some_untrusted_html=some_untrusted_html)
# 在模板中设置 autoescape
# {% autoescape xhtml_escape %}
# <p>{{ some_untrusted_html }}</p>
# {% end %}
2. tornado.escape 模块
Tornado 提供了 tornado.escape 模块,其中包含一些用于字符串操作和转义的实用函数。
HTML 转义:
import tornado.escape
untrusted_html = '<script>alert("XSS attack!");</script>'
escaped_html = tornado.escape.xhtml_escape(untrusted_html)
URL 编码和解码:
import tornado.escape
url = "https://www.example.com/path?name=value"
encoded_url = tornado.escape.url_escape(url)
decoded_url = tornado.escape.url_unescape(encoded_url)
JSON 编码和解码:
import tornado.escape
data = {"name": "John", "age": 30}
encoded_json = tornado.escape.json_encode(data)
decoded_data = tornado.escape.json_decode(encoded_json)
这些函数可用于在处理请求时进行必要的字符串操作和转义,确保应用程序的安全性和稳定性。特别是在处理用户输入并将其展示在网页上时,务必进行适当的转义,以避免潜在的安全风险。
转载请注明出处:http://www.zyzy.cn/article/detail/7427/Tornado