对来自数据库的jQuery回调方法使用eval是否节省?

时间:2016-04-20 作者:john

我会很简短,希望我能正确地解释我的情况。这是我的设想。jQuery slider插件有一个匿名回调方法。我想让管理员能够为该回调方法创建一个函数。因此,从插件的添加/编辑页面,管理员有一个文本区域来输入jQuery代码。现在,textarea输入保存到数据库中,当使用wp\\u localize\\u script()传递时,它将作为字符串传递,而不会被识别为Javascript/jQuery代码。到目前为止,我只能使用eval()使其工作,以便识别并作为Javascript/jQuery函数运行。

在管理页面上:

<textarea id="callback" name="callback" rows="10" ><?php echo $callback; ?></textarea>

在wp\\u localize\\u script()数组上:

wp_localize_script( \'init_file\', \'slider_option\', $config_array );

$config_array = array(
    ...
    \'onSliderEnd\' => $callback,
    ...
);
在初始化jQuery文件上:

$(\'body\').slider({
    ...
    \'onSliderEnd\': function(){ eval( slider_option.onSliderEnd; ); },
    ...
});
这是使用eval()的安全方法吗?还有其他建议吗?还是我应该不允许这样的选择?

提前感谢您的回复。

2 个回复
最合适的回答,由SO网友:Mark Kaplun 整理而成

不允许。

你的用户不是一个软件开发人员,假装他是只会导致糟糕的结局。这甚至是在谈到安全性等之前。

如果您认为存在有意义的回调,只需自己提供它们。

SO网友:Pieter Goosen

绝不允许任何人通过任何文本编辑器添加任何jQuery脚本。如何知道脚本是否恶意,如何处理jQuery错误,如何知道jQuery是否正确,是否允许jQuery。

eval() 带来额外的安全风险,在评估用户提交的字符串时应避免。始终正确、适当地清理、验证和转义用户提交的值。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果