马上注册,结交更多好友,享用更多功能,让你轻松玩转社区
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在本框架API接口使用中,由于DISCUZ内置的防注入系统,导致在传输特殊字符时产生报错,下面我们就来解决这个问题:
展示部分特殊字符:!@#¥%……&*()——+?/
例如:我们使用登录接口,其中有一个密码后面有 + 这个特殊字符,我们应该怎么办?
第一步:在你开发的客户端上,进行文本替换,把 + 这个字符,用 _jiahao_ 来代替; 【+ → _jiahao_】
那么原密码是:demo+ 被文本替换成 demo_jiahao_,这样在传输过程中就没有特殊字符了。
第二步:通过二次扩展获取 passwrod这个密码传输参数,将 _jiahao_ 替换成 + ; 【_jiahao_ → +】
以下是验证扩展-内置钩子扩展实例:
[PHP] 纯文本查看 复制代码 public function hook_param_password($params,$value){//所有参数调用
/**
* 批量替换文本
* @param $str // 源文件
* @param array $array //替换规则 array('要改变的字符'=>'要改变为的字符')
* @return string //返回替换源文件
*/
$value = xx_convert::str_replace_array($value, array(
'_jiahao_' => '+',
'_dengyuhao_' => '=',
'_xiaoyuhao_'=>'<',
'_dayuhao_'=>'>',
'_zuokuohao_'=>'(',
'_youkuohao_'=>')',
'_yinhao_'=>'"',
'_danyinhao_'=>"'",
'_wenhao_'=>"?",
'_xiegang_'=>"/",
));
return $value;//返回解密结果,替换password参数的值
}
总结:通过在客户端对特殊字符进行文本替换传输,再到插件后台利用扩展开发进行替换文本,达到传输特殊字符的双向传输,有效的绕过DISCUZ内置防注入系统。
|