您可以做一些事情来提高安全性:
首先,Ajax调用应该使用WordPress nonce,如您所说:
<script type="text/javascript" >
jQuery(document).ready(function($) {
var data = {
action: \'ACTION_NAME\',
Whatever_data: 1234,
_ajax_nonce: <?php echo wp_create_nonce( \'my_ajax_nonce\' ); ?>
};
$.post(ajaxurl, data, function(response) {
alert(\'Got this from the server: \' + response);
});
});
</script>
在上面的代码中,请记住这两个属性
action
和
_ajax_nonce
这两者都需要验证对admin ajax的调用。php,在前几行代码中,它检查是否向服务器发送了操作,如果没有,则检查
die()
\'s(
FIRST CHECK) 然后使用该动作和动作挂钩调用自己的ajax函数:
//if you want only logged in users to access this function use this hook
add_action(\'wp_ajax_ACTION_NAME\', \'my_AJAX_processing_function\');
//if you want none logged in users to access this function use this hook
add_action(\'wp_ajax_nopriv_ACTION_NAME\', \'my_AJAX_processing_function\');
如果您希望登录的用户和未登录的访问者都访问此功能,请使用两个挂钩(第二个检查)。
然后,在ajax函数中,首先应该检查ajax引用(第三次检查):
function my_AJAX_processing_function(){
check_ajax_referer(\'my_ajax_nonce\');
//do stuff here
}
接下来,当使用用户输入在数据库上运行查询时,您应该使用
$wpdb->prepare
用于转义和验证,而不是:
$query = "SELECT `id` FROM table WHERE `user_id` = $myid;";
$data = $wpdb->get_col( $query )
使用:
$data = $wpdb->query( $wpdb->prepare("SELECT `id` FROM table WHERE `user_id` = %d",$myid));