2017-08-16 49 views
4

我創建了一個網頁,我想用JavaScript來只上傳文本文件,它工作正常。如何查看上傳文件是否爲txt或手動修改擴展名?

使用下面的JavaScript,它正在檢查上傳文件TXT或不?

<script> 
    function checkExt() { 
    if(document.mainForm.myfile.value.lastIndexOf(".txt")==-1) { 
     alert("Please upload only .txt extention file"); 
     return false; 
    } 
    } 
</script> 

<form name="mainForm"> 
    <input type="file" name="myfile" onchange="checkExt();"/> 
</form> 

Live Demo Here

問題:如果我更改文件.exe文件的擴展名爲.txt手動那麼它也被上傳,因爲我只檢查文件的擴展名。所以我的問題是如何從exe文件(這是手動更改爲txt)上傳保護。

我想停止上傳exe文件,這是改變或強制或手動更名爲jar文件。

+0

的JavaScript可以通過客戶端進行更改。所以這隻會讓你從一些腳本小孩中解脫出來。能夠真正傷害你的人只會對任何js解決方案嗤之以鼻。你需要一個後端驗證。 – Doomenik

+0

@Doomenik,好吧,我會在谷歌上搜索後端驗證,或者您可以使用Java引用此場景的任何鏈接? – RGI

+0

https://stackoverflow.com/questions/4169713/how-to-check-a-uploaded-file-whether-it-is-a-image-or-other-file – Doomenik

回答

0

你只需要獲取文件不是form.valueform.files。在那裏,你可以找到文件的這種特性:

{ 
    lastModified: 1502265800000 
    lastModifiedDate: Wed Aug 09 2017 11:03:20 GMT+0300 (EEST) {} 
    name: "14ecdf0302f4bbc84cfbbf85b3b94013.jpg" 
    size: 463225 
    type: "image/jpeg" 
} 
+0

但user2560664是正確更好地檢查服務器端 – Masiama

+0

型':「圖像/ JPEG」'是基於文件的擴展名,而不是內容 –

+0

感謝@JaromandaX,那麼真應該檢查只在服務器 – Masiama

2

您需要驗證修改exe文件爲TXT的後端代碼。這是非常簡單的代碼。下面的程序是檢查文件是否可執行或者不是任何exe文件改爲.txt擴展名。

這裏驗證意味着文件中,我們可以讀取文件中包含的字節碼或不

import java.io.File; 
import java.io.FileInputStream; 

public class TestExecutableFile { 

    public static void main(String[] args) { 

     byte[] firstBytes = new byte[4]; 
     try { 
      FileInputStream input = new FileInputStream(new File("[filepath]/[filename]")); 
      input.read(firstBytes); 

      // Checking file is executable 
      if (firstBytes[0] == 0x4d && firstBytes[1] == 0x5a) { 
       System.out.println("Executable File"); 
      }else{ 
       System.out.println("Non Executable File"); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
相關問題