我如何避免在我的内容安全策略中进行不安全的评估

How can i avoid unsafe eval in my Content Security Policy

我已阅读有关如何修复由于使用匿名函数使用 setTimeout 而在我的内容安全策略中需要 unsafe eval 的答案。

但是我使用的脚本包含以下内容:-

$ = function (a) {
return /^f/.test(typeof a) ? /in/.test(b.readyState) ? setTimeout('$('+a+')', 9) : a() : new i(a)
}

而且我一辈子也想不出如何将它转换成使用匿名函数的脚本,或者是否有办法重写它。

代码是 ki.js 的一部分,如果您需要查看更多代码。

我试过了

return /^f/.test(typeof a) ? /in/.test(b.readyState) ? setTimeout(function(){'$('+a+')'}, 9) : a() : new i(a)

但这显然行不通!我想我只是睡眠不足,但有人可以指出正确的方向吗!

如果您要使用自己的匿名函数,则无需使用字符串引用。里面用普通代码就可以了

(虽然不确定内容安全策略的事情,只是帮助语法。如果这不能完全解决问题,我将删除答案并 post 这作为评论。)

$ = function (a) {
  return /^f/.test(typeof a) 
    ? /in/.test(b.readyState) 
      ? setTimeout(function() { $(a); }, 9) 
      : a() 
    : new i(a);
};