Javascript 寻找javscript eval函数的替代方案

Javascript 寻找javscript eval函数的替代方案,javascript,ajax,Javascript,Ajax,我正在使用以下函数发出XHR请求,并在可能的情况下从响应中执行javascript: 函数ajaxRequest(resultDiv、processing、action、paramName、param、paramName2、param2、parseJs){ 如果(处理){ document.getElementById(resultDiv).innerHTML=处理; } var xmlhttp=window.XMLHttpRequest?new XMLHttpRequest():new Act

我正在使用以下函数发出XHR请求,并在可能的情况下从响应中执行javascript:

函数ajaxRequest(resultDiv、processing、action、paramName、param、paramName2、param2、parseJs){
如果(处理){
document.getElementById(resultDiv).innerHTML=处理;
}
var xmlhttp=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject(“Microsoft.xmlhttp”);
xmlhttp.onreadystatechange=函数(){
if(this.readyState==4&&this.status==200){
var resp=this.responseText;
document.getElementById(resultDiv).innerHTML=resp;
if(parseJs){
parseScript(resp);
}
}
}
如果(参数2){
open(“GET”、“/query?”+paramName+”=“+param+”&“+paramName2+”=“+param2+”&action=“+action,true);
}否则{
open(“GET”、“/query?”+paramName+”=“+param+”&action=“+action,true);
}
xmlhttp.send();
}
函数解析脚本(strcode){
var scripts=newarray();

while(strcode.indexOf(“Eval可能很慢,但如果您运行的代码不受信任或未经您自己验证,则与任何其他解决方案一样危险。如果您确实需要另一种方法来运行此代码,则可以尝试动态脚本文本插入,如答案中所述作为
Eval()的替代方法)
可能是将代码注入页面上的
标记中,然后立即执行该标记

在下面的示例中,代码提供给
script.text
。对于您问题中的URL,请使用
script.src

const script=document.createElement('script');
script.text='console.log(“foo”);';
document.body.append(脚本);

//日志“foo”"
确实没有一个alternative@epascarello那么你知道其他网站是如何实现这一功能的吗?他们也使用eval吗?你在评估任意JavaScript。这正是
eval
的用法。我想问你是否应该首先这样做。你想在响应中评估所有JavaScript吗?为什么您需要此功能吗?大多数网站不返回需要评估的脚本。@例如,Carcigenicate yes可用于显示祝酒词或模态。(注意:我使用materializecss框架)。因此,是否有可能干预eval函数并做些坏事(攻击)b用户还是黑客?@Meraj UlIslam,这取决于导入的JS来自何处。如果它完全由用户提供,JS可能包含窃取会话cookie或其他东西的代码,并且评估结果可能不好。“这取决于导入的JS来自何处”-为什么要导入JS?您只需使用“邪恶”调用
parseScript()
有效负载。这非常容易(取决于网站的其他问题)。这就像:用户在帖子上键入一条评论。然后通过ajax发布评论。在ajax托管文件(php)中,尝试保存评论。然后通过一些js执行(例如,模态)立即显示结果。并动态重新加载注释。用户没有执行任何操作。但我想知道用户是否可以以任何方式利用eval功能。是否存在类似eval的漏洞?