Python CGI 脚本拒绝包含数据 URI 的数据 (403)
Python CGI script rejects data that includes data URI (403)
我有一个使用 SVG 创建小图像的网络应用程序,我希望它能够将这些图像保存到服务器,然后再次加载它们(作为 SVG 元素的内部 HTML)。使用 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,它就会失败,并且脚本 returns 403(禁止)。不幸的是,我有点想将数据 URI 传递给它。在某些情况下,SVG 中会放置一个小图像,而在几乎所有情况下,SVG 中都会嵌入字体作为 base64 数据 URI。
根据我从谷歌搜索中发现的一点信息,这似乎是一个安全问题,以防止通过数据 URI 对服务器进行攻击。是否有可供我使用的标准替代方案,可以让我存储这些数据而不感到沮丧 Python/Apache/whoever 正在感到沮丧?
我不太确定你的 svg 变量是什么样的(我猜 'some text' + URI)
在任何情况下,您都可能希望使用 encodeURIComponent() 来对 URI 中的特殊字符进行编码。
因此,您可以尝试将 svg 拆分为 'text part' 和 'URI' 部分(例如使用 split() ),然后将其发送到 ajax 请求中并更新字典,其中 svg 变量类似于 'some text' + encodeURIComponent('URI')
我有一个使用 SVG 创建小图像的网络应用程序,我希望它能够将这些图像保存到服务器,然后再次加载它们(作为 SVG 元素的内部 HTML)。使用 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,它就会失败,并且脚本 returns 403(禁止)。不幸的是,我有点想将数据 URI 传递给它。在某些情况下,SVG 中会放置一个小图像,而在几乎所有情况下,SVG 中都会嵌入字体作为 base64 数据 URI。
根据我从谷歌搜索中发现的一点信息,这似乎是一个安全问题,以防止通过数据 URI 对服务器进行攻击。是否有可供我使用的标准替代方案,可以让我存储这些数据而不感到沮丧 Python/Apache/whoever 正在感到沮丧?
我不太确定你的 svg 变量是什么样的(我猜 'some text' + URI) 在任何情况下,您都可能希望使用 encodeURIComponent() 来对 URI 中的特殊字符进行编码。
因此,您可以尝试将 svg 拆分为 'text part' 和 'URI' 部分(例如使用 split() ),然后将其发送到 ajax 请求中并更新字典,其中 svg 变量类似于 'some text' + encodeURIComponent('URI')