我在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);});这似乎有效。但是,我只想确认一下,这是正确的用法吗?这样做有什么风险/问题吗?我想灵活地进行任何类型的搜索,例如
我看到很多关于如何像这样动态添加代码的建议(source):varmyScript=document.createElement("script");myScript.setAttribute("type","text/javascript");myScript.innerHTML+='alert("Hello");';document.body.appendChild(myScript);相对于eval像这样eval('alert("Hello");');人们提示eval的性能下降和安全问题,但我无法想象如何添加标签会更快或更安全。编辑人们想知道为什么我要评估像alert("Hell
有什么理由吗eval("(function(x){returnx*x;})")不使用IE9返回函数? 最佳答案 这是JScript解析器中的一个错误。它不应该在IE9中发生,除非您处于兼容或怪癖模式。IE8将您的函数表达式误解为函数声明,导致它无法返回任何内容。之前在thisquestion中提到过.您可以使用其他典型方法之一解决它,以消除JScript解析器对什么构成表达式与语句的混淆,例如:eval('[function(x){returnx*x;}][0]')eval('0?0:function(x){returnx*x;}'
如果我没记错的话,eval会执行给定字符串中的有效代码eval("alert('hey')");和setTimeout("alert('hey')",1000);做同样的事情,只是用了一个计时器。settimeout和eval一样有风险吗? 最佳答案 我想说你听到了同样的反对意见。setTimeout(带有字符串而不是函数参数)与eval几乎相同。如果可能的话,setTimeout(function(){alert("hey");},1000); 关于javascript-为什么人们说j
我知道JSON.parse()可以防止攻击者将javascript注入(inject)到响应中,因为JSON解析器只是一个文本解析器,而不是脚本解析器,所以请不要关闭这是所有其他问题的重复谈谈那个。这是一个不同的问题。如果攻击者可以劫持您的Ajax调用并将javascript放入Ajax调用中,他们是否也有可能劫持您的实际网页并将任意javascript放入您的页面,从而完成完全相同的攻击?当然,使用JSON.parse()而不是eval()不会有任何损失(除非您的环境中还没有JSON解析器并且必须添加更多代码才能获得),但是在什么情况下如果您的网页由与您的ajax调用相同的主机提供服