馬上注冊,結(jié)交更多好友,享用更多功能,讓你輕松玩轉(zhuǎn)社區(qū)
您需要 登錄 才可以下載或查看,沒有賬號?立即注冊
×
在本框架API接口使用中,由于DISCUZ內(nèi)置的防注入系統(tǒng),導(dǎo)致在傳輸特殊字符時產(chǎn)生報錯,下面我們就來解決這個問題:
360截圖20240909155737.png (55.25 KB, 下載次數(shù): 80)
下載附件
2024-9-9 15:59 上傳
展示部分特殊字符:!@#¥%……&*()——+?/
例如:我們使用登錄接口,其中有一個密碼后面有 + 這個特殊字符,我們應(yīng)該怎么辦?
第一步:在你開發(fā)的客戶端上,進(jìn)行文本替換,把 + 這個字符,用 _jiahao_ 來代替; 【+ → _jiahao_】
那么原密碼是:demo+ 被文本替換成 demo_jiahao_,這樣在傳輸過程中就沒有特殊字符了。
第二步:通過二次擴(kuò)展獲取 passwrod這個密碼傳輸參數(shù),將 _jiahao_ 替換成 + ; 【_jiahao_ → +】
以下是驗證擴(kuò)展-內(nèi)置鉤子擴(kuò)展實例:
[PHP] 純文本查看 復(fù)制代碼 public function hook_param_password($params,$value){//所有參數(shù)調(diào)用
/**
* 批量替換文本
* @param $str // 源文件
* @param array $array //替換規(guī)則 array('要改變的字符'=>'要改變?yōu)榈淖址?)
* @return string //返回替換源文件
*/
$value = xx_convert::str_replace_array($value, array(
'_jiahao_' => '+',
'_dengyuhao_' => '=',
'_xiaoyuhao_'=>'<',
'_dayuhao_'=>'>',
'_zuokuohao_'=>'(',
'_youkuohao_'=>')',
'_yinhao_'=>'"',
'_danyinhao_'=>"'",
'_wenhao_'=>"?",
'_xiegang_'=>"/",
));
return $value;//返回解密結(jié)果,替換password參數(shù)的值
}
總結(jié):通過在客戶端對特殊字符進(jìn)行文本替換傳輸,再到插件后臺利用擴(kuò)展開發(fā)進(jìn)行替換文本,達(dá)到傳輸特殊字符的雙向傳輸,有效的繞過DISCUZ內(nèi)置防注入系統(tǒng)。
![]()
|