Python CGI 脚本拒绝包含数据 URI (403) 的数据
Python CGI script rejects data that includes data URI (403)
我有一个使用SVG创建小图像的Web应用程序,我希望它能够将这些图像保存到服务器,然后再次加载它们(作为SVG元素的innerHTML)。使用 ajax,我将 svg 的内部 HTML 发送到我的服务器端 Python 脚本,它看起来或多或少像这样:
#!/usr/bin/python
import cgi
data=cgi.FieldStorage()
filename=data.getfirst('filename')
svg=data.getfirst('svg')
f = open('/filepath/'+filename,'w')
f.write(svg)
f.close()
ajax 调用如下所示:
function savetoserver() {
var filename=$('#savename').val()
var svg = document.getElementById("svg_element").innerHTML
dictionary={'svg':svg,'filename':filename}
$.ajax({
url:'http://myserver.com/savetoserver.py',
type: 'post',
datatype: 'html',
data: dictionary,
success: function(response){
closedialog()
}
})
}
这一切都非常适合简单的输入。但是,如果我的 SVG 中包含任何类型的数据 URI,它将失败,并且脚本返回 403(禁止)。不幸的是,我有点想传递给它数据 URI。在某些情况下,小图像放置在 SVG 中,在几乎所有情况下,SVG 中都嵌入了字体作为 base64 数据 URI。
从我从谷歌搜索中发现的一点点来看,这似乎是一个安全问题,以防止通过数据URI对服务器进行攻击。是否有一个标准的替代方案可供我使用,可以让我存储这些数据而不会让 Python/Apache/任何不高兴的人感到不安?
我不确定你的 svg 变量是什么样子的(我猜是"一些文本"+ URI)在任何情况下,您可能都希望使用 encodeURIComponent() 来编码 URI 中的特殊字符。
因此,您可以尝试将 svg 拆分为"文本部分"和"URI"部分(例如使用 split(),然后在 ajax 请求中使用更新的字典发送它,其中 svg 变量将是类似于"一些文本"+ encodeURIComponent('URI')
相关文章:
- 如何在Edge中下载图像/png数据URI
- 无声声音数据uri
- Interent Explorer中的数据URI文件下载
- 追加子数据 URI,替换 IE 中的其他对象
- 将数据URI保存在cookie中,以便稍后检索
- 是否可以使用jQuery或PHP上传数据URI
- 使用数据URI提示用户保存文件
- 编辑后将大画布保存为数据URI
- Office.js将数据URI与addFileAttachmentAsync一起使用
- 正在获取跨域内容的数据URI
- 如何从 base64 数据 URI 在服务器端保存 PNG 图像
- 如何嵌入带有数据uri的大图像
- 如何使用dropzone.js收集数据URI内容
- s XSS 上的数据 URI 是否可被利用
- 带有 base64 字符串(数据 URI)的 HTML 图像标记
- 如何使用数据 URI 将 MSWord 文档 (.docx) 传送到 Chrome
- 使用数据 URI 将多个文件下载到 Zip 文件中 Javascript
- 如何从 Web API 发布和获取数据 uri 图像
- 如何动态应用 base64 编码的数据 uri
- 到 Blob 的数据 URI 会损坏映像