[英]Check File Upload extension (PHP/Jquery/Javascript)
作為頭銜,哪個更好,為什么呢? 這樣做有什么缺點嗎? 我聽說Jquery / Javascript檢查不好,建議使用PHP,但是不知道為什么。
需要任何人的推薦。 提前致謝。
任何人都可以看到這是好是壞:
<input type="file" name="task_doc" class="task_doc" onChange="checkext();"/>
function checkext(){
var permittedFileType = ['pdf', 'doc', 'docx', 'xls', 'xlsx'];
var fext = $(".task_doc").val().split('.').pop().toLowerCase();
var resultFile = validate_filetype(fext, permittedFileType);
if(resultFile === false){
$(".task_doc").replaceWith("<input type='file' name='task_doc' class='task_doc' onChange='checkext();'>");
alert("Invalid Extension");
}
else{
alert("Success");
}
}
function validate_filetype(fext, ftype)
{
for(var num in ftype)
{
if(fext == ftype[num])
return true;
}
return false;
}
如果您僅使用JavaScript來檢查數據有效性,那么高級用戶將可以上傳他們想要的任何數據。
另一方面,如果用戶輸入的數據(在這種情況下為文件)無效,則使用javascript可能是用戶獲得快速反饋的便捷方法。
因此,我建議同時使用客戶端腳本和服務器端腳本。
您必須假設所有外部數據都受到污染並且可能是惡意的。 用戶可以禁用JavaScript並發送他們想要的任何文件。 或者,用戶可以將文件發送到服務器,然后更改MIME類型和/或擴展名以繞過服務器上的檢查。
最好的選擇是確保將服務器設置為正確處理各種MIME類型,並且默認情況下不將未知文件類型解析為PHP。 換句話說,除了將.php文件作為PHP處理之外,不要將Apache設置為處理任何東西,並且完全阻止.php文件上傳。 從安全角度來看,處理文件上傳是一個棘手的情況。 我強烈建議將上載保存在文檔根目錄之外,將其重命名為只有您知道的隨機字符串(即在上載時將隨機名稱存儲在數據庫中),然后通過PHP將文件發送到瀏覽器。
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=' . basename($filename));
header('Content-Transfer-Encoding: binary');
readfile($filename);
我建議這樣做是因為將它們存儲在文檔根目錄之外會阻止訪問,使用唯一的文件名會阻止某人直接訪問它,並且強制進行下載(應)阻止任何自動執行惡意文件,因此希望用戶的防病毒軟件能夠找到它....
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.