tornadoescape.py
'''
转义
'''
import tornado
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.options import define, parse_config_file, options
from tornado.web import Application, RequestHandler
# 继承自RequestHandler类
# 对请求的方式(get/post)调用重写父类的get/post方法做出响应
class IndexHandler(RequestHandler):
def get(self,*args,**kwargs):
self.render('escape.html',result='')
def post(self,*args,**kwargs):
t = self.get_body_argument('test')
# 针对chrome浏览器
self.set_header('X-XSS-Protection',0)
self.render('escape.html', result=t)
define('duankou',type=int,default=8888)
# 当前文件所在文件夹的上一个(mytornado)下的config/config
parse_config_file('../config/config')
app = Application([('/',IndexHandler)],
template_path='mytemplate')
server = HTTPServer(app)
server.listen(options.duankou)
IOLoop.current().start()
escape.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% autoescape None%}
<form method="post" action="/">
<textarea cols="30" rows="5" name="test">
</textarea>
<input type="submit" value="提交">
</form>
{{result}}
</body>
</html>
详解:
Tornado针对<script></scripte>会默认开启自动转义功能,以防止恶意代码的执行.
所谓的转义就是把<script>标签变为<scripte>
第一种:
在Application的构造器中,以关键字参数autoescape传入,值为None.
但会影响到所有模板中的HTML文件都关闭转义.
如果只想让某一个页面关闭转义,使用第二种方式
第二种:
在需要关闭自动转义的页面中,加入语句:
{%autoescape None%}
注意:
Google Chrome浏览器安全级别比较高,
可以通过设置响应头来压制Chrome的安全机制:
set_header(‘X-XSS-Protection’,0)