跳到主要內容

發表文章

目前顯示的是 10月, 2022的文章

Xoops模組開發->解決上傳圖檔檔名被Xoops Protector防護模組誤判為有害檔踢出的問題-教學撰寫:徐嘉裕Neil hsu

如果有開啟Xoops Protector防護模組的此項功能 假如有惡意檔案被上傳就強制踢出 假如有人企圖上傳一些可以執行的惡意檔案,例如副檔名為.php的檔案,此模組將強制踢出XOOPS。 上傳單一圖檔時會因為檔名有禁用字元而被當成惡意檔案踢出系統, 例如: LINE_ALBUM_2022. 閱讀日活動 4.21-4.22_220805_5.jpg 這樣的檔名就會被踢出去,但這確實是無害檔沒錯 user還需要改檔名才能上傳,實在有點矯枉過正,解決方案就是在接收$_FILES的php檔最頂端 (include "header.php") 上面加上以下code if(!empty($_FILES['upfile']['name'])) $_FILES['upfile']['name']=strtotime(date("Y-m-d H:i:s")).'.'.substr(strrchr($_FILES['upfile']['name'], '.'), 1); //重編檔名防止被防護模組阻擋 //$_FILES['upfile'] 就是表單傳送檔案的name值, 可改為自訂值 這樣檔名就會被改成時間戳格式,原始副檔名也會保留,如果user上傳php檔一樣會被Xoops Protector防護模組踢出去,但 LINE_ALBUM_2022. 閱讀日活動 4.21-4.22_220805_5.jpg 這樣格式的圖檔就能上傳。 另外如果有多個單張圖檔上傳,例如upfile1~upfile2~upfile3,也能用以下批次方法修改 foreach(array_keys($_FILES) as  $val){ if(!empty($_FILES[$val]['name'])  &&  !is_array($_FILES[$val]['type'])){ $_FILES[$val]['name']=strtotime(date("Y-m-d H:i:s")).'.'.substr(strrchr($