目录

WAFPHP高阶教程

WAFPHP框架开发指南

数据模型开发规范

路径结构

#your WAFPHP path#/Lib/Model/

接口规范

需实现 ModelInterface 接口,包含以下核心方法:

核心方法说明

方法名 功能描述 特殊要求
getInstance() 单例模式实例化方法,避免多实例资源消耗 必须实现
getDefaultConfig() 返回默认配置,与用户配置合并时以用户配置优先 必须实现
sessionExists() 检查当前session有效性(绑定客户端IP,IP变更即失效) 必须实现
sessionBreath() session心跳维护,每次请求更新session有效时间 必须实现
proclaimSession() 颁发新session,记录客户端IP 必须实现
addSessionValue() 向session写入数据 必须实现
delSessionValue() 删除session指定键值 必须实现
getSessionValue() 获取session指定键值 必须实现
isBlackIP() 检查客户端IP是否在黑名单 必须实现
isWhiteSession() 检查当前session是否在白名单 必须实现
addBlackIP() 添加IP到黑名单 必须实现
addWhiteSession() 添加session到白名单 必须实现
delBlackIP() 删除黑名单IP(支持通配符前缀匹配) 必须实现
delWhiteSession() 删除白名单session(支持通配符前缀匹配) 必须实现
get() 通用数据获取方法 必须实现
set() 通用数据存储方法(建议设置过期时间) 必须实现
del() 通用数据删除方法 必须实现
getError() 获取最后错误信息 必须实现
quit() 资源清理方法,系统退出时自动调用 必须实现

⚠️ 特别说明:此处的session为框架自定义会话机制,与原生PHP session完全独立

检测脚本开发规范

路径结构

#your WAFPHP path#/Lib/Waf/

接口规范

需实现 WafInterface 接口,包含以下核心方法:

核心方法说明

方法名 功能描述 特殊要求
getDefaultConfig() 提供默认配置防止系统异常 必须实现
getError() 返回最后一次错误的详细信息 必须实现
run($config, $client) 执行检测逻辑• $config: 当前脚本配置(WAF__CONFIG)• $client: 客户端信息数组(IP/GET/POST/UA/Cookie/Host) 必须实现

开发建议

  • 配置参数应包含:
    • 检测阈值
    • 规则模式
    • 触发动作
  • 客户端检测维度建议:
    $client = [
        'ip' => '192.168.0.1',
        'get' => $_GET,
        'post' => $_POST,
        'ua' => $_SERVER['HTTP_USER_AGENT'],
        'cookie' => $_COOKIE,
        'host' => $_SERVER['HTTP_HOST']
    ];
    

开发最佳实践

数据模型开发

class MyModel implements ModelInterface {
    // 实现单例模式
    private static $instance;
    public static function getInstance() {
        if (!self::$instance) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    // 默认配置示例
    public function getDefaultConfig() {
        return [
            'session_expire' => 3600,
            'blacklist_ttl' => 86400
        ];
    }

    // ...其他方法实现
}

检测脚本开发

class MyWaf implements WafInterface {
    private $error = '';

    public function getDefaultConfig() {
        return [
            'max_requests' => 100,
            'time_window' => 60,
            'block_action' => 'log_and_block'
        ];
    }

    public function run($config, $client) {
        // 实现检测逻辑
        if ($this->checkRateLimit($client['ip'], $config)) {
            return true; // 通过检测
        }
        $this->error = '请求频率超限';
        return false; // 拦截请求
    }

    public function getError() {
        return $this->error;
    }
}

开发提示:建议结合PHPStan进行静态分析,使用PHPUnit编写单元测试。调试时可通过WAFPHP_DEBUG常量开启调试模式,查看详细的检测日志。