馬上注冊,結交更多好友,享用更多功能,讓你輕松玩轉社區
您需要 登錄 才可以下載或查看,沒有賬號?立即注冊
×
在本框架API接口使用中,由于DISCUZ內置的防注入系統,導致在傳輸特殊字符時產生報錯,下面我們就來解決這個問題:
360截圖20240909155737.png (55.25 KB, 下載次數: 22)
下載附件
2024-9-9 15:59 上傳
展示部分特殊字符:!@#¥%……&*()——+?/
例如:我們使用登錄接口,其中有一個密碼后面有 + 這個特殊字符,我們應該怎么辦?
第一步:在你開發的客戶端上,進行文本替換,把 + 這個字符,用 _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內置防注入系統。
![]()
|