在eval的论证中逃避

Kir*_*lla 5 javascript

我正在使用eval分配动态对象的属性.

property_name_1 = property1;
property_name_2 = property2;
property_value_1 = 1;
property_value_2 = 2;
var obj = new Object;

eval("obj."+property_name_1+"='"+property_value_1+"'");
eval("obj."+property_name_2+"='"+property_value_2+"'");
Run Code Online (Sandbox Code Playgroud)

然后我在ajax请求期间使用此对象作为发布数据.

一切都很好,但众所周知的eval不是安全的功能,我应该逃避property_value_1,property_value_2.例如,property_value_2 = "<a href=''>Yahoo!</a>"会导致错误.

最好的方法是什么?

谢谢

Guf*_*ffa 6

最好的方法是根本不使用eval:

obj[property_name_1] = property_value_1;
obj[property_name_2] = property_value_2;
Run Code Online (Sandbox Code Playgroud)

如果你仍然想要,你必须转义撇号和反斜杠以将值放在字符串文字中:

eval("obj." + property_name_1 + "='" + property_value_1.replace(/\\/g,'\\\\').replace(/'/g,"\\'") + "'");
eval("obj." + property_name_2 + "='" + property_value_2.replace(/\\/g,'\\\\').replace(/'/g,"\\'") + "'");
Run Code Online (Sandbox Code Playgroud)

(如果用引号而不是撇号包围文字字符串,则必须转义引号和反斜杠.)