源码

import uuid
from flask import Flask, request, make_response, session,render_template, url_for, redirect, render_template_string app=Flask(__name__)
app.config['SECRET_KEY']=str(uuid.uuid4()) #flask只对后缀名为('.html', '.htm', '.xml', '.xhtml')的自动进行转义,所以开发的时候尽量写个单独的模板,实现代码和视图分离 #<script>alert(1)</script>需要url编码 #ssti xss都存在
#单独写了个404报错页面
@app.errorhandler(404)
def page_not_found(e):
template='''
{%% block body %%}
<div class="center-content error">
<h1>Oops! That page doesn't exist.</h1>
<h3>%s</h3>
</div>
{%% endblock %%}
'''%(request.url)
return render_template_string(template),404 #无ssti,有xss
@app.route('/test1',methods=['GET','POST'])
def test1():
if request.method=='GET':
name=request.args.get("name")
return name
return "hello world!" #都有
@app.route('/test2',methods=['GET','POST'])
def test2():
if request.method=='GET':
name=request.args.get("name")
template="""
<h1>%s</h1>
"""%(name)
return render_template_string(template)
return "hello world!" #安全
@app.route('/test3',methods=['GET','POST'])
def test3():
if request.method=='GET':
name=request.args.get("name")
template="""
<h1>hello,{{name}}</h1>
"""
return render_template_string(template,name=name)
return "hello world!" #安全,提倡的做法
@app.route('/test4',methods=['GET','POST'])
def test4():
if request.method=='GET':
name=request.args.get("name")
return render_template('1.html',name=name)
return "hello world!" app.run(port=80,debug=True)
flask有防止ssti注入和XSS的方法,默认对('.html', '.htm', '.xml', '.xhtml')为后缀的进行转义,所以写代码的时候无论代码量多少,写个单独的模板传递进去参数显示总是安全的。

但是并不会对render_template_string进行转义,这就造成了ssti和xss
不管怎么说,代码和视图分离是最好的了。

最新文章

  1. hdu 4027
  2. [百度空间] [转] 四元数(Quaternions)
  3. JVM的组成部分与内存管理
  4. sencha touch jsonp
  5. SQL中not and or优先级问题
  6. HDU2084JAVA
  7. 浅谈iOS视频播放的N种解决方案
  8. Path Sum II——LeetCode
  9. python 3.4 装matplotlib numpy
  10. android EventBus详解(三)
  11. nginx替换响应头(重点:如何在替换时加上if判断)
  12. Java 大数值类型执行精确计算
  13. window7环境下ZooKeeper的安装运行及监控查看
  14. shell编程awk基础介绍
  15. 基于Helm和Operator的K8S应用管理的分享
  16. 检查mysql是否运行
  17. oracle导出expdp导入impdp
  18. Linq in GroupBy GroupJoin
  19. php将汉字转换为拼音和得到词语首字母(一)
  20. 使用MySQLMTOP监控MySQL性能

热门文章

  1. 什么是DTO?
  2. 2017.9.27 JavaWeb 属性的设置和获取
  3. 系统运行时间悬浮框(demo)
  4. Django Reverse for &#39;artic_post&#39; with arguments &#39;()&#39; and keyword arguments &#39;{}&#39; not found. 0 pattern(s) tried: []
  5. 关于Linux部分版本无法安装Chrome的问题
  6. 第3章 如何用DAP仿真器下载程序—零死角玩转STM32-F429系列
  7. windows下配置kafka
  8. django+xadmin在线教育平台(八)
  9. 微信网页授权access_token与基础支持的access_token
  10. POJ 1286 P&#243;lya定理