flask-ssti,xss的防止
2024-09-04 12:18:16
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
不管怎么说,代码和视图分离是最好的了。
最新文章
- hdu 4027
- [百度空间] [转] 四元数(Quaternions)
- JVM的组成部分与内存管理
- sencha touch jsonp
- SQL中not and or优先级问题
- HDU2084JAVA
- 浅谈iOS视频播放的N种解决方案
- Path Sum II——LeetCode
- python 3.4 装matplotlib numpy
- android EventBus详解(三)
- nginx替换响应头(重点:如何在替换时加上if判断)
- Java 大数值类型执行精确计算
- window7环境下ZooKeeper的安装运行及监控查看
- shell编程awk基础介绍
- 基于Helm和Operator的K8S应用管理的分享
- 检查mysql是否运行
- oracle导出expdp导入impdp
- Linq in GroupBy GroupJoin
- php将汉字转换为拼音和得到词语首字母(一)
- 使用MySQLMTOP监控MySQL性能
热门文章
- 什么是DTO?
- 2017.9.27 JavaWeb 属性的设置和获取
- 系统运行时间悬浮框(demo)
- Django Reverse for &#39;artic_post&#39; with arguments &#39;()&#39; and keyword arguments &#39;{}&#39; not found. 0 pattern(s) tried: []
- 关于Linux部分版本无法安装Chrome的问题
- 第3章 	如何用DAP仿真器下载程序—零死角玩转STM32-F429系列
- windows下配置kafka
- django+xadmin在线教育平台(八)
- 微信网页授权access_token与基础支持的access_token
- POJ 1286 P&#243;lya定理