
您现在的位置是:首页 > WordPress教程WordPress教程
WordPress CSRF攻击预防
WP集市
2025-09-08
【WordPress教程】
1361人已围观
- WordPress搞CSRF防护啊,说白了就是防别人冒充用户瞎操作。比如你正登录后台呢,坏人发你个链接,一点就悄悄帮你删文章、改密码——这事得从插件、主题、核心三个层面堵漏。咱用非ce验证码举个栗子,但记住啊,代码别硬抄,得看版本适配:
// 在表单里插nonce盾牌
function my_form_nonce() {
wp_nonce_field('my_action', 'my_nonce_field');
echo '<input type="submit" value="提交">';
}
// 处理请求时验盾牌
if ( ! isset( $_POST['my_nonce_field'] ) || ! wp_verify_nonce( $_POST['my_nonce_field'], 'my_action' ) ) {
wp_die('非ce校验扑街了!');
} else {
// 安全执行敏感操作
}
- 核心API自带防护机制,比如用
wp_ajax_
钩子时,WordPress其实暗地里验了referer。但你要是自己写自定义处理,记得手动加个nonce检查,像这样:
add_action('admin_post_my_custom_action', 'handle_my_action');
function handle_my_action() {
check_admin_referer('my_action_name'); // 自动验nonce和权限
// 下面再写数据库操作
}
- 前端发AJAX请求也别裸奔,把nonce塞进js变量再传。注意用
wp_localize_script
注入安全值:
// 后端注册脚本时注入nonce
wp_enqueue_script('my-ajax-script');
wp_localize_script('my-ajax-script', 'ajax_obj', array(
'nonce' => wp_create_nonce('ajax_nonce')
));
// 前端发请求时带上nonce
fetch('/wp-admin/admin-ajax.php', {
method: 'POST',
body: new URLSearchParams({
action: 'my_ajax_action',
nonce: ajax_obj.nonce
})
})
- 有些老旧插件可能漏了校验,咱得主动扫雷。比如看到表单没有
wp_nonce_field
或者ajax没传nonce,赶紧提工单让开发者修。临时自救可以挂个钩子强行验证:
add_filter('pre_process_whatever', 'force_nonce_check');
function force_nonce_check($data) {
if (!wp_verify_nonce($_REQUEST['_wpnonce'], 'some_action')) {
wp_die('请求来源可疑,已拦截');
}
return $data;
}
- 文件上传功能也是重灾区,别光验MIME类型,一定要加nonce防护。参考媒体库的上传逻辑:
if (isset($_FILES['my_file']) && check_admin_referer('upload_nonce', '_wpnonce')) {
$file = wp_handle_upload($_FILES['my_file'], array('test_form' => false));
// 处理上传文件
}
- 最后啰嗦句:WordPress自己的API(如
wp_insert_post
)不会自动做CSRF防护,必须咱手动在前端表单和处理器两头加nonce校验。养成习惯,每个表单都塞个wp_nonce_field
,每个处理函数首行都甩个check_admin_referer
,安全指数直接拉满。
总之CSRF防护不是魔法,靠的是每个环节的细心缝合。宁可代码多写几行,也别给黑客留后门——毕竟谁都不想半夜被改密码对吧?
Tags:
文章版权声明:除非注明,否则均为WP集市原创文章,转载或复制请以超链接形式并注明出处。
上一篇:WordPress点击劫持防范
下一篇:WordPress安全头设置

热门文章
