1.eval()函数定义

 它是一个函数,只接收一个字符串类型的参数

eval(string)

 

如果输入的参数是js代码,会被函数直接解析执行

如果输入的参数是普通字符串,则返回该字符串

实例如下

1.1 输入string为js代码

eval("var  a =1;var b=4; alert(a+b)");

执行alter语句显示为5

可以把eval()中的string类比成html文件中的<script><script/>包裹的内容,符合js逻辑的语句在此解析并执行

1.2普通字符串

eval('hello');
返回字符串hello

1.3解析json数据

会报错

javascript eval 漏洞 js eval()_字符串

 

 原因在于:

json本身具有大括号{},eval()在解析时会识别为js语句块的开始和结束,所以显示无效语法报错

 解决方法:

强制的将{}转换成非js语句块,那么就需要加上圆括号(json),它的作用在于将括号内的表达式(expression)转换为对象,而不是语句(statement)来执行

alert(eval("{}"); // return undefined

//对象字面量不进行()转换,会被识别为语句块,空语句块

alert(eval("({})");// return object[Object]

//进行()转换,则识别为一个空对象

所以要给json变量加上(),因为是变量添加括号,所以用字符串加法,需要加""

var josnobj = eval("("+jsonstr+")");
//实际上就解析的(jsonstr)