通过ajax发送base64图像数据到cfc

问题描述:

我使用html2canvas.js从页面上的div创建<canvas>图像。我想要做的是通过ajax将渲染后的base64图像发送到cfc,这样我就可以将图像保存到服务器上的文件夹中,并将文件路径返回到页面。通过ajax发送base64图像数据到cfc

我遇到的问题是,当我将base64编码数据发送到cfc时,cfc会解释数据,但会在数据中出现多个“[invalid]”实例。

如果我只是将图像发布到DOM,图像渲染就好了。这里是一个要点的链接,它具有创建的正常图像与从传递给cfc的参数转储的图像相比:https://gist.github.com/ronnieduke/d83dfb3e31677191f88e

这里是我正在运行的Ajax(其中img.src是张贴在上面的链接画布数据)

var image = new Image(); 
 
image.id = 'pic'; 
 
// This results in the base64 data posted in image-normal.txt in the gist 
 
image.src = canvas.toDataURL("image/png"); 
 
\t \t    
 
var data = new FormData(); 
 
data.append('imgData',image.src); 
 
\t \t    
 
// Genrate images in cfc 
 
$.ajax({ 
 
    url: 'my.cfc?method=generateImage', 
 
    type:'POST', 
 
    data:data, 
 
    dataType:'JSON', 
 
    processData: false, 
 
    cache:false, 
 
    async:false, 
 
    contentType: false, 
 
    success:function(data){ 
 
    console.log(data); 
 
    }, 
 
    error:function(result){ 
 
    alert(result.responseText); 
 
    } 
 
});

这里是我的CFC:

<cffunction name="generateImage" output="true" access="remote" returnFormat="JSON"> 
<cfargument name="imgData" required="true" type="string"> 

<cfset request.acceptExt = 'image/jpg,image/gif,image/png' /> 

<cfset image = imageReadBase64(arguments.imageData)> 

<cfimage 
    action="write" 
    destination="image.png" 
    source="#image#" 
    overwrite="yes" 
> 

发生什么事是imageReadBase64()函数抛出一个错误,它无法读取PNG数据。当我转储arguments.imgData这是当我得到的结果发布在上面的要点img-cfc.txt。这就是包含所有[INVALID]实例的内容。

我发现有趣的是,当比较两个版本的base64图像时,我注意到无论从cfc版本中哪里有[INVALID],字母“QSS”(在各种情况下)都出现在正常版本中。

例如:

正常:...6s9QSSpN...

从CFC参数甩:...6s9[INVALID]pN...


正常:...CwKGgwqsSH7Qyq1g...

从CFC说法甩:...CwKGgw[INVALID]H7Qyq1g...

我希望从特殊字符或什么类似的东西,但我不知道什么是“QSS”有什么关系。

我已经尝试JS方和CFC方面的各种不同的编码/解码,并没有任何工作。任何想法或见解将不胜感激!

由于提前,

UPDATE: 的问题,其实是用 'QSS' 是对XSS在村中的变量。一旦我将我的settings.ini中的字段名称作为例外添加,数据通常会发生。

+1

您是否已经在CFIDE管理中打开了“启用全局脚本保护”功能? –

+0

我认为这个网站是在Railo上,所以我必须检查。你认为它应该打开还是关闭? – user3576557

+1

我在CF上关闭它,因为它检查传递给CF的数据并替换它认为是危险的东西。请参阅[链接](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d69.html) –

这个问题实际上是因为'QSS'是Mura中XSS的一个变量。一旦我将我的settings.ini中的字段名称作为例外添加,数据通常会发生。从J.院长 例settings.ini.cfm线

更新:

scriptprotectexceptions=eventid,body 

这将告诉村做了XSS黑名单时忽略这些字段。在我的情况下,eventid字段有很长的一串字符,碰巧有QSS在其中,导致我巨大的间歇性头痛。