我正在使用html2canvas.js从页面上的div创建<canvas>
图像。我想要做的是通过ajax将渲染的base64图像发送到cfc,这样我就可以将图像保存到服务器上的文件夹中并将文件路径返回到页面。
我遇到的问题是当我将base64编码数据发送到cfc时,cfc解释数据,但数据中有几个“[invalid]”实例。
如果我只是将图像发布到DOM,图像渲染就好了。这是一个gist的链接,它创建了正常图像,而不是我从传递给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");
var data = new FormData();
data.append('imgData',image.src);
// 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数据。当我在上面的要点中的img-cfc.txt中发布结果时,我转储arguments.imgData
。这是包含所有[INVALID]实例的内容。
我发现有趣的是,当仔细比较base64图像的两个版本时,我注意到无论cfc版本中的[INVALID]是什么,字母“QSS”(在各种情况下)都出现在普通版本中。
例如:
正常: ...6s9QSSpN...
从cfc论坛中删除: ...6s9[INVALID]pN...
正常: ...CwKGgwqsSH7Qyq1g...
从cfc论坛中删除: ...CwKGgw[INVALID]H7Qyq1g...
我希望从特殊角色或其他东西那样的东西,但我不确定“QSS”与任何东西有什么关系。
我已经在JS端和CFC端尝试了各种不同的编码/解码,但没有任何工作。任何想法或见解将不胜感激!
提前致谢,
更新 问题实际上是'QSS'是Mura for XSS的一个变量。一旦我在settings.ini中添加了字段名称作为例外,数据就会正常发生。
答案 0 :(得分:0)
问题实际上是'QSS'是Mura for XSS的一个变量。一旦我在settings.ini中添加了字段名称作为例外,数据就会正常发生。
J. Dean更新 示例settings.ini.cfm行:
scriptprotectexceptions=eventid,body
这将告诉Mura在进行XSS黑名单时忽略这些字段。在我的情况下,偶数字段有很长的字符串恰好有QSS,导致我巨大的间歇性头痛。