我正在使用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>"会导致错误.
最好的方法是什么?
谢谢
最好的方法是根本不使用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)
(如果用引号而不是撇号包围文字字符串,则必须转义引号和反斜杠.)
| 归档时间: |
|
| 查看次数: |
4459 次 |
| 最近记录: |