我有一部分调试框架需要能够运行时评估对象。具体来说,如果我有一个像这样的字符串"{a:1,b:2}"它需要将它评估为一个包含成员a和b与这些值。但是,如果我执行eval("{a:1,b:2}"),它似乎将其评估为一个语句,并说明了非法标签。我已经破解了它,所以它的评估是这样的:eval("varx="+str+";x;");这似乎有效,但似乎是一个可怕的hack。关于如何更好地做到这一点有什么建议吗?(顺便说一句,我知道eval的危险,但这是调试框架的一部分,实际用户不会看到。) 最佳答案 您可以使用()将其解析为对象,而不是语句,
Content-Security-Policy(CSP)header旨在保护您的应用程序免受网络应用程序中的恶意资源注入(inject)。为简单起见,您为所有图像、脚本、样式等提供允许域来源的白名单。与此同时,营销团队正在使用GoogleTagManager(GTM)管理标签。原理是从页面收集信息,将它们发送到GTM并将这些数据用作变量来生成标签,这是模板化JS/HTML和这些变量的混合。问题是这些标签中的大多数都包含javascript,用于将非常具体的数据发送到跟踪器、广告服务器或任何合作伙伴。假设我的营销团队了解安全风险并且不会包含恶意脚本。有没有办法知道GTM导入了哪些域,以便
我在这里浏览源代码:http://js-dos.com/games/doom2.exe.html并注意到一些事情:if(typeofModule==='undefined'){Module=eval('(function(){try{returnModule||{}}catch(e){return{}}})()');}Module函数是用内联脚本标记定义的稍后在另一个内联标签中用var再次声明,这次它检查模块是否存在。我的问题:如果它只会尝试再次返回模块,那么用自调用函数声明模块有什么意义?不是已经被证明不存在了吗?为什么不直接将Module显式声明为{}?
我想允许用户在文本输入中执行简单的计算,这样键入2*5的结果将是10。我将除数字以外的所有内容替换为空字符串,然后使用eval()进行计算。与手动解析相比,这似乎更容易并且可能更快。人们常说eval()是不安全的,所以我想知道在这种情况下使用它是否有任何危险或缺点。function(input){value=input.value.replace(/[^-\d/*+.]/g,'');input.value=eval(value);} 最佳答案 那是安全的,不是因为您正在净化它,而是因为它全部由用户输入并在他们自己的浏览器中运行。如果
我在JSLint中看到过这条消息...document.writecanbeaformofeval.并想知道到底是怎么回事?JSLintinstructions页面状态:Theevalfunction...provideaccesstotheJavaScriptcompiler.Thisissometimesnecessary,butinmostcasesitindicatesthepresenceofextremelybadcoding....那么,document.write如何“提供对JavaScript编译器的访问”呢?谢谢 最佳答案
我正在开发一个网络应用程序来教授编程概念。网页有一些关于编程概念的文本,然后让用户在文本编辑器窗口中输入javascript代码以尝试回答编程问题。当用户点击“提交”时,我会分析他们输入的文本,看看他们是否已经解决了问题。例如,我要求他们“编写一个名为f的函数,将其参数加三”。以下是我正在做的分析用户文本的工作:在具有严格设置的文本上运行JSLint,尤其是在不假设浏览器或控制台功能的情况下。如果有任何错误,显示错误并停止。eval(usertext);遍历传递赋值的条件,eval(condition)。示例条件是"f(1)===4"。条件来自可信来源。显示通过/未通过条件。我的问题:
使用manifest_version:2的GoogleChrome扩展被限制使用eval或newFunction。我检查过的所有JavaScript模板库(mustachejs、underscorejs、jQuery模板、hoganjs等)都使用newFunction。是否有任何不使用两者的相当成熟和受支持的?Infoaboutthesecurityrestrictions. 最佳答案 事实证明,mustachejs最近添加了newFunction并且使用了tag0.4.2没有它。它的API与Mustache.to_html而不是M
我们想让我们的用户能够在我们的应用程序中执行自己创建的JavaScript代码。为此,我们需要使用eval来评估代码。为了将所有安全问题降至最低(如果不是零),我们的想法是防止在代码中使用任何window或document函数。所以没有XMLHttpRequest或类似的东西。这是代码:functionsecure_eval(s){varret;(function(){varcopyXMLHttpRequest=XMLHttpRequest;//saveorginalfunctionincopyXMLHttpRequest=undefined;//makeorignalfunction
在WP8上,如果我执行(1):Microsoft.Phone.WebBrowserwb;wb.InvokeScript("eval","window.external.notify('abc');");它抛出“调用目标返回错误”,未知错误,hresult80020101。但是(2)wb.InvokeScript("eval","window.alert('abc');");工作正常,并显示消息框。和(3)wb.InvokeScript("eval","(function(){window.external.notify('abc');})();");也可以正常工作。我的问题是,阻止ev
我有JSON数据,我正在使用filter搜索:myJsonData.filter(function(entry){return(entry.type==='model'||entry.type==='photographer');});现在我没有在返回后指定这些条件,而是创建了一个类似的字符串(因为我想要一个预先创建的搜索条件列表),然后使用eval()所以:myJsonData.filter(function(){returneval(stringToSearch);});这似乎有效。但是,我只想确认一下,这是正确的用法吗?这样做有什么风险/问题吗?我想灵活地进行任何类型的搜索,例如