Skip to content

API 黑白名单扩展 ​

通过 Filter_Plugin_API_CheckMods 接口,可以在 Z-BlogPHP 的 API 模块黑白名单检查(ApiCheckMods)中追加自定义规则,控制哪些模块、动作可以访问,适用于封闭特定 API 端点或启用白名单模式的场景。

接口信息 ​

接口参数说明
Filter_Plugin_API_CheckMods&$mods_allow, &$mods_disallowAPI 的黑白名单机制,回调向两个数组追加规则

完整案例 ​

下例把 member 模块的 put 动作加入黑名单,禁止通过 API 修改用户资料:

php
<?php

RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");

function ActivePlugin_demoAPP()
{
    Add_Filter_Plugin('Filter_Plugin_API_CheckMods', 'demoAPP_API_CheckMods');
}

function demoAPP_API_CheckMods(&$mods_allow, &$mods_disallow)
{
    // 黑名单:array( 模块名 => 动作名 ),动作名为空字符串时匹配整个模块
    $mods_disallow[] = array('member' => 'put');
    // 白名单慎用:一旦添加了白名单规则,不在白名单内的 mod 都将被拒绝
    // $mods_allow[] = array('post' => '');
}

注意事项 ​

  • 回调签名需使用引用传递(&$mods_allow, &$mods_disallow),向数组追加规则后,系统会将其合并进全局黑白名单,然后立即对当前请求的 mod、act 做检查,未通过则返回 503 错误;
  • 规则格式为 array(模块名 => 动作名),动作名为空字符串时匹配该模块下所有动作;黑白名单检查先白后黑:白名单非空时不在名单内的请求直接拒绝,命中黑名单的请求同样拒绝;
  • 该接口触发于 API 模块清单载入(ApiLoadMods)之后、POST 数据载入与 CSRF 校验之前,是控制模块可用性的正规入口;
  • 如只按请求做临时性拦截(如按用户权限),可改用 Filter_Plugin_API_Dispatch 接口。