管理员删除帖子的安全性

时间:2013-01-28 作者:l2aelba

我的代码非常简单,就像管理员通过Wordpress Function(PHP)删除帖子并使用jQuery执行操作一样

<?php
include(\'../../../../../../wp-config.php\');
if(current_user_can(\'edit_posts\')){
$id = $_POST[\'ID\'];

 wp_delete_post($id);

}else{die();}
?>
这是我的密码,你认为安全性如何?这就够了?

1 个回复
最合适的回答,由SO网友:david.binda 整理而成

首先,阅读一些关于WordPress Ajax API 关于角色和能力,“编辑帖子”的能力Contributor. 我建议检查“delete\\u others\\u posts”,以证明该用户至少是一名编辑。或者使用“manage\\u options”功能(具有管理员,而不是编辑器)。

此外,还有check ajax referer 该功能可帮助您防止来自网站外部的条目。了解更多信息nonces 而且

下面是codex中关于在AJAX中使用nonce的示例:

在主文件中,按如下方式设置nonce:

<script type="text/javascript">
jQuery(document).ready(function($){
    var data = {
        action: \'my_action\',
        security: \'<?php echo $ajax_nonce; ?>\',
        my_string: \'Hello World!\'
    };
    $.post(ajaxurl, data, function(response) {
        alert("Response: " + response);
    });
});
</script>
在ajax文件中,检查如下引用:

add_action( \'wp_ajax_my_action\', \'my_action_function\' );
function my_action_function() {
    check_ajax_referer( \'my-special-string\', \'security\' );
    echo $_POST[\'my_string\'];
    die;
}

结束

相关推荐

无法让jQuery进入编辑后脚本

在下面的代码中,除非我硬编码了对jQuery库的引用,否则页面上的jQuery位不会工作。我尝试使用的排队方法有什么问题?在函数中。php:if(is_admin()) { /* LOAD ADMIN SCRIPTS **********************************/ require_once(TEMPLATEPATH . \'/functions_private.php\'); } 在functions\\u pr