Python CGI脚本拒绝包含数据URI的数据(403) - javascript

我有一个使用SVG创建小图像的webapp,我希望它能够将这些图像保存到服务器,然后再次加载它们(作为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')

Javascript + Python:将数组发送到Python脚本,将结果返回给Javascript - javascript

我想建立一个网页,该网页通过Javascript API进行许多Facebook状态更新,并将它们分类到一个数组中。然后,我想将此数组发送到Python脚本,该脚本可以专门使用NLTK.进行语言分析。在Python中获得合适的结果后,我想将结果从该脚本返回到Javascript,以显示给用户等。听起来可能吗? javascript大神给出的解决方案 是的,完…

Javascript vs python:具有两个递归分支的函数的不同输出 - javascript

我一直在将python代码毫无问题地翻译成javascript,但对于以下示例,我却没有这样做,也不知道是什么原因。尽管有相似的代码,但是javascript代码似乎产生了与python完全不同的输出。我已经研究了这个问题,并且似乎javascript无法执行第二个递归分支?谁知道我该如何使javascript代码输出与python相似的代码?谢谢1- Py…

在Django视图中渲染URL变量 - javascript

我试图在URL中传递一个id,它是在js中创建的,我需要在渲染中传递它,以便可以在新页面的jQuery中使用它。这可能吗?JSresults ="'results/"+this.pk+"'"; 网址url(r'^personnel/results/(\d*)/$', '…

Python Bottle:在请求POST数据中访问数组变量 - javascript

最近,我收到了一个部分完成的项目,而我刚开始使用Bottle。我遇到一种情况,我在AJAX请求中发送字典,而Bottle在服务器端。字典看起来像这样(在JavaScript中):var myInt = 5; var myArray = [0, 1, 2]; var data = { myInt: myInt, myArray: myArray }; 然后,在…

如何根据手势滚动网页 - javascript

如何使用pyhton / javascript使用手势向上/向下或向左/向右滚动页面。我尝试了很多找到解决方案,但无法解决。 参考方案 Javascript手势插件(JSHG)是一个很棒的插件,它使您可以通过现有网站或Web应用程序中的网络摄像头来支持用户的手势识别。您无需具有计算机视觉的任何背景即可使用此插件。当前,它提供了一组基本的手势,其中包括手的位置…