2017-08-16 82 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(); 
     } 
    } 
} 
相关问题