热门关键字:
jquery > jquery教程 > javascript > Js中eval函数的详解与危害

Js中eval函数的详解与危害

6035
作者:管理员
发布时间:2012/9/7 17:24:39
评论数:1
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=83

参数:
 
codeString
 
必选。

包含有效JScript代码的字符串。
 
override
 
可选项。
 
确定要应用于codeString中代码的安全权限的字符串。

eval函数允许动态执行JScript源代码。
 
传递给eval方法的代码执行时所在的上下文和调用eval方法时的上下文一样。

请注意,在eval语句中定义的新变量或类型对于封闭程序是不可见的。

除非将字符串“unsafe”传递为第二个参数,否则,传递至eval方法的代码在受限安全上下文中执行。

受限安全上下文禁止访问系统资源,如文件系统、网络或用户界面。

如果代码试图访问这些资源,则会产生安全异常。

当eval的第二个参数为字符串“unsafe”时,传递给eval方法的代码在调用代码所在的安全上下文中执行。

第二个参数是区分大小写的,因此,字符串“Unsafe”或“UnSAfE”不会重写受限安全上下文。

示例:例如,下面的代码将变量mydate初始化为测试日期或当前日期,这取决于变量doTest的值:

var doTest:boolean=true;
var dateFn:String;
if(doTest)
 dateFn="Date(1971,3,8)";
else
 dateFn="Date()";
var mydate:Date;
eval("mydate=new"+dateFn+";");
print(mydate);

该程序的输出为:ThuApr800:00:00PDT1971
 
eval()的危害

eval()接受任意的字符串,并当作JavaScript代码来处理,这个机制已经有安全隐患了!一般生成对象建议用JavaScript内置的方法处理比如解析json的时候用JSON.parse()如果在流程中必须使用eval()的时候建议考虑newFunction()代替。
有一个小的潜在好处,因为在新Function()中作代码评估是在局部函数作用域中运行,所以代码中任何被评估的通过var定义的变量都不会自动变成全局变量。




如果您觉得本文的内容对您的学习有所帮助:支付鼓励



关键字:Js中eval函数的详解与危害
友荐云推荐