即使在添加“unsafe-eval”之后,调用函数()以阻止CSP

我正在研究一个NodeJS项目,我正在使用CSP ( 内容安全策略 )。

我正在使用一个外部插件FullCalendar被csp阻止给出以下错误:

Error: call to Function() blocked by CSP

我使用script-src 'self' 'unsafe-eval'; 重写它,但没有在Firefox中工作。 在其他浏览器,它工作正常。

我被这个问题困住了4个小时。

得到解决scheme将是有帮助的。

我在CSP限制中使用以下格式。

X-Content-Security-Policy:default-src *; script-src'self''unsafe-eval'; object-src'none'; style-src'self''unsafe-inline img-src *; options eval-script;
X-WebKit-CSP:default-src *; script-src'self''unsafe-eval'; object-src'none'; style-src'self''unsafe-inline img-src *;
内容安全策略:default-src *; script-src'self''unsafe-eval'; object-src'none'; style-src'self''unsafe-inline img-src *;

假设this.disp包含要评估的expression式。 还disp: document.getElementById("id_of_text_input_field") 。 例如。 this.disp.value ='123/45 * 67 + 8-9%10'。 它也将关心negative号码。 例如。 '-123 + 3 = -120`。 好极了!

 compute: function compute() { var sign = 1; if (this.disp.value[0] == '-') sign = -1; this.disp.value = this.calculate(this.disp.value,sign); this.update(this.disp.value.length); return this.disp.value; }, calculate: function calculate(input,sign){ var opr_list = { add : '+' , sub : '-' , div : '/' , mlt : '*' , mod : '%' }; opr_list.opr = [[ [opr_list.mlt] , [opr_list.div] , [opr_list.mod]], [ [opr_list.add] , [opr_list.sub] ]]; input = input.replace(/[^0-9%^*\/()\-+.]/g,''); var output,n; for(var i=0, n=opr_list.opr.length; i<n; i++ ){ var re = new RegExp('(\\d+\\.?\\d*)([\\'+opr_list.opr[i].join('\\')+'])(\\d+\\.?\\d*)'); re.lastIndex = 0; while( re.test(input) ){ output = this.compute_result(opr_list,sign*RegExp.$1,RegExp.$2,RegExp.$3); if (isNaN(output) || !isFinite(output)) return output; input = input.replace(re,output); } } return output; }, compute_result: function compute_result(opr_list,a,op,b){ a=a*1; b=b*1; switch(op){ case opr_list.add: return a+b; break; case opr_list.sub: return ab; break; case opr_list.div: return a/b; break; case opr_list.mlt: return a*b; break; case opr_list.mod: return a%b; break; default: null; } } 

您可以根据您的要求添加更多的操作员案例 。 例如。 Square,x ^ y等

Interesting Posts