admin 发表于 2024-4-12 23:36:33

如何实现特殊字符参数值GET传输的解决办法



在本框架API接口使用中,由于DISCUZ内置的防注入系统,导致在传输特殊字符时产生报错,下面我们就来解决这个问题:

展示部分特殊字符:!@#¥%……&*()——+

例如:我们使用登录接口,其中有一个密码后面有 + 这个特殊字符,我们应该怎么办?

第一步:在你开发的客户端上,进行文本替换,把 + 这个字符,用 _jiahao_ 来代替; 【+ → _jiahao_】

那么原密码是:demo+ 被文本替换成 demo_jiahao_,这样在传输过程中就没有特殊字符了。

第二步:通过二次扩展获取 passwrod这个密码传输参数,将 _jiahao_ 替换成 + ; 【_jiahao_ → +】

以下是验证扩展-内置钩子扩展实例:
    public function hook_param_password($params,$value){//所有参数调用
      /**
         * 批量替换文本
         * @param $str // 源文件
         * @param array $array //替换规则 array('要改变的字符'=>'要改变为的字符')
         * @return string //返回替换源文件
         */
      $value = xx_convert::str_replace_array($value, array(
            '_jiahao_' => '+',
      ));
      return $value;//返回解密结果,替换password参数的值
    }
总结:通过在客户端对特殊字符进行文本替换传输,再到插件后台利用扩展开发进行替换文本,达到传输特殊字符的双向传输,有效的绕过DISCUZ内置防注入系统。



页: [1]
查看完整版本: 如何实现特殊字符参数值GET传输的解决办法