Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免在python web框架中转义html字符? 问题:_Python_Bottle - Fatal编程技术网

如何避免在python web框架中转义html字符? 问题:

如何避免在python web框架中转义html字符? 问题:,python,bottle,Python,Bottle,如何防止在中转义字符 背景 我正在用瓶子(python)制作一个歌曲歌词webapp,在将其插入数据库之前,我正在测试所有数据是否正确,因此,现在,我基本上有一个表单,其中包含“歌曲名称”、“艺术家”、“歌词”(在文本区域中),就是这样 当表单提交时,它将加载一个包含上述三个输入值(歌曲、艺术家和歌词)的页面,所有内容都正常工作,但歌词的html被转义(在将歌词发送到模板之前,我将所有\n替换为) 所以我做了我的研究,发现瓶子逃脱了html标签以防止XSS攻击,你可以在变量名前加一个“!”来禁用

如何防止在中转义字符

背景 我正在用瓶子(python)制作一个歌曲歌词webapp,在将其插入数据库之前,我正在测试所有数据是否正确,因此,现在,我基本上有一个表单,其中包含“歌曲名称”、“艺术家”、“歌词”(在文本区域中),就是这样

当表单提交时,它将加载一个包含上述三个输入值(歌曲、艺术家和歌词)的页面,所有内容都正常工作,但歌词的html被转义(在将歌词发送到模板之前,我将所有
\n
替换为

所以我做了我的研究,发现瓶子逃脱了html标签以防止XSS攻击,你可以在变量名前加一个“!”来禁用它,太棒了!我找到了解决办法,但是。。。当我试图使用它时,它抛出了一个错误:

错误-
异常:
语法错误('invalid syntax',('H:\\Server\\htdocs\\letras\\prueba.tpl',4,27,“u'Letra:','u escape(!Letra['Letra']),u'])\n)
回溯(最近一次呼叫最后一次):
文件“H:\Server\htdocs\letras\battle.py”,第764行,在句柄中
返回路线。呼叫(**args)
文件“H:\Server\htdocs\letras\battle.py”,第1575行,在包装器中
rv=回拨(*a,**ka)
guardar_letra中第41行的“index.py”文件
返回模板('prueba.tpl',letra=data)
模板中第3117行的文件“H:\Server\htdocs\letras\battle.py”
返回模板[tplid]。渲染(kwargs)
文件“H:\Server\htdocs\letras\battle.py”,第3090行,在渲染中
self.execute(stdout、kwargs)
文件“H:\Server\htdocs\letras\battle.py”,第3078行,在execute中
评估(self.co,env)
文件“H:\Server\htdocs\letras\battle.py”,第185行,在__
value=obj.\uuuu dict\uuuu[self.func.\uuuuuu name\uuuuu]=self.func(obj)
文件“H:\Server\htdocs\letras\bottle.py”,第2977行,在co中
返回编译(self.code、self.filename或“”、“exec”)
文件“H:\Server\htdocs\letras\prueba.tpl”,第4行
u'Letra:',_escape(!Letra['Letra']),u']
^
SyntaxError:无效语法
index.py-
从瓶子导入瓶子、路线、运行、模板、静态文件、获取、发布、请求、响应
从passlib.hash导入sha256_crypt
将MySQLdb作为mdb导入
导入时间
进口稀土
@获取(“/enviar”)
def enviar_letra():
返回模板('enviar_letra.tpl')
@post(“/enviar”)
def guardar_letra():
titulo=request.forms.get('titulo').capitalize()#从表单中获取歌曲标题
artista=request.forms.get('artista')#获取艺术家
letra=request.forms.get('letra')#获取歌词
fecha_envio=time.strftime(“%Y-%m-%d%H:%m:%S”)#歌词发送日期
titulo=re.sub(“[^\w |!\s |.|,]”,“,”,titulo)#我删除每个字符,除了:单词、感叹号、空格、点、逗号
url=titulo+“-”+artista#将歌曲的标题和艺术家的名字连接起来,形成一个漂亮的url
url=re.sub('\W+|",'-',url).lower()#降低url中的所有字符
url=url.strip(“-”)#strips“-”在开头和结尾
letra=letra.replace(“\n”,“
”)#将歌词文本区域中的\n替换为
数据={“titulo”:titulo,“artista”:artista,“letra”:letra,“url”:url,“Fecha_envio”:Fecha_envio}歌曲词典 返回模板('prueba.tpl',letra=data)#加载prueba.tpl模板并将“data”字典作为“letra”发送(letra是西班牙语歌词) 运行(host='localhost',port=8080,debug=True)
HTML模板-
Letra de{{{Letra['titulo']}
波尔:{{letra['artista']}
费查:{{letra['Fecha_envio']}
莱特拉:{{!莱特拉['Letra']}
如果我让瓶子从我的歌词html中逃逸出来(注意

是如何以纯文本显示的),下面是它的工作原理/外观:

最后,这就是它的外观


您需要将感叹号放在开口的正后方
{{
瓶子才能识别它:

<div>Letra: {{! letra['letra'] }}</div>
Letra:{{!Letra['Letra']}
为了安全起见,您最好完全省略其中的空格:

<div>Letra: {{!letra['letra']}}</div>
Letra:{{!Letra['Letra']}

请在此处发布您的代码,而不要在外部网站上发布。我们希望问题对现在和将来的每个人都有用。您的错误消息是文本,请复制并粘贴到此处。一般来说,您会尽可能晚地在模板中换行以中断转换。我尝试过,但我的整个代码中只有第一行是正确的检测到缩进是代码,因此我必须缩进代码的每一行,以使其正确显示:/这就是为什么我决定使用外部站点来显示我的代码。我们可以帮助您对其进行格式化;请参阅以获取更详细的帮助。post editor有一个用于缩进代码的特殊按钮,选择文本并单击
{}
icon。哇,你太快了。我自己也得出了这个结论,但我刚刚完成了瓶子.py代码的研究来证明这一点。哇,我真不敢相信这会这么容易!有时我们花了很多时间思考问题,结果这些问题真的很愚蠢:P,这就是问题所在,我删除了所有空格,现在它可以正常工作了ed,谢谢你为我节省了更多的思考时间,我现在可以很高兴地睡觉了,现在已经快5点了。再次感谢!!!顺便说一句,我现在对XSS攻击很开放,但是我要做一个自定义的转义函数,只允许字母数字,!,,
标记,其余的将被删除!
<h1>Letra de {{ letra['titulo'] }}</h1>
<h2>Por: {{ letra['artista'] }}</h2>
<div>Fecha: {{ letra['Fecha_envio'] }}</div>
<div>Letra: {{ !letra['letra'] }}</div>
<div>Letra: {{! letra['letra'] }}</div>
<div>Letra: {{!letra['letra']}}</div>