Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-上载文件内容类型验证_Javascript_Python_Django_Validation_File Upload - Fatal编程技术网

Javascript-上载文件内容类型验证

Javascript-上载文件内容类型验证,javascript,python,django,validation,file-upload,Javascript,Python,Django,Validation,File Upload,如何在使用JavaScript上载之前验证文件的内容类型?我不是在问扩展验证。我想验证pdf、纯文本和MS word文件 我正在使用django forms.ModelForm将文件上载小部件传递到html。我也无法在服务器端实现这一点。这是一个问题 理论上,您可以使用来读取文件 然后,您需要用JavaScript为您关心的文件格式编写解析器,以检查它们是否匹配。理论上,您可以使用来读取文件 然后,您需要用JavaScript为您关心的文件格式编写解析器,以检查它们是否匹配。也许,但它不会给您任

如何在使用JavaScript上载之前验证文件的内容类型?我不是在问扩展验证。我想验证pdf、纯文本和MS word文件

我正在使用django forms.ModelForm将文件上载小部件传递到html。我也无法在服务器端实现这一点。这是一个问题


理论上,您可以使用来读取文件


然后,您需要用JavaScript为您关心的文件格式编写解析器,以检查它们是否匹配。

理论上,您可以使用来读取文件


然后,您需要用JavaScript为您关心的文件格式编写解析器,以检查它们是否匹配。

也许,但它不会给您任何形式的安全性,因为攻击者可以使用其他方式上载文件,从而绕过您的验证

要使用非常不安全的扩展名检查文件类型,因为它非常容易操作,您可以使用JavaScript。见这个问题:

[编辑]经过一段时间后,我发现输入元素有一个属性accept,该属性接受mime类型模式的列表。不幸的是,大多数浏览器忽略了它,或者只使用它来调整文件选择对话框。见这个问题:

[EDIT 2]现在,似乎文件API是您唯一不想使用文件扩展名的方式。每个文件实例都有一个包含mime类型的type属性

但是这个API正在开发中,所以它并不适用于任何地方。而且也不能保证您将获得属性可以是的MIME类型


因此,我建议采用这种方法:尝试使用文件API。如果文件扩展名不可用或type属性为空,请使用该文件扩展名。

可能,但它不会为您提供任何形式的安全性,因为攻击者可以使用其他方式上载文件,从而绕过您的验证

要使用非常不安全的扩展名检查文件类型,因为它非常容易操作,您可以使用JavaScript。见这个问题:

[编辑]经过一段时间后,我发现输入元素有一个属性accept,该属性接受mime类型模式的列表。不幸的是,大多数浏览器忽略了它,或者只使用它来调整文件选择对话框。见这个问题:

[EDIT 2]现在,似乎文件API是您唯一不想使用文件扩展名的方式。每个文件实例都有一个包含mime类型的type属性

但是这个API正在开发中,所以它并不适用于任何地方。而且也不能保证您将获得属性可以是的MIME类型



因此,我建议采用这种方法:尝试使用文件API。如果文件不可用或type属性为空,请使用文件扩展名。

是否询问如何在发送到服务器之前识别客户端上的文件类型?是的,但我知道扩展名验证。是否询问如何在发送到服务器之前识别客户端上的文件类型?是,但我知道扩展名验证。大概像所有客户端验证一样,其目的不是为了安全,而是为了避免用户上载可能较大的文件而被拒绝。问题明确拒绝文件扩展名检查。IIRC,accept属性的实现通常基于文件扩展名。1。如果不使用文件扩展名,似乎没有办法做到这一点。2.服务器可以读取文件的前几个KB,分析它们并在关闭通道时拒绝它们。大多数服务器框架不支持这种开箱即用的方式,但这是可能的。大概像所有客户端验证一样,其目的不是为了安全,而是为了避免用户上载可能较大的文件而被拒绝。问题明确地拒绝了文件扩展名checking.IIRC,accept属性的实现通常基于文件扩展名。1。如果不使用文件扩展名,似乎没有办法做到这一点。2.服务器可以读取文件的前几个KB,分析它们并在关闭通道时拒绝它们。大多数服务器框架不支持这种开箱即用的方式,但这是可能的;如果您有一个文件对象,您可以读取它的type属性:也就是说,文件API是HTML 5,并且正在工作。@AaronDigulla-这需要信任浏览器来正确确定文件类型。我希望浏览器要求底层操作系统和Windows至少使用文件扩展名。@Quentin:即使您试图解析文件,攻击者也可以通过使用命令行工具上传来轻松绕过此漏洞。因此,无论你怎么做,这都将是一个薄弱的防御,这将导致一个问题,即你应该在它上花费多少精力。@Aarondigula-请参阅我对你答案的第一条评论。注意:你不必解析文件;如果您有一个文件对象,您可以读取它的type属性:也就是说,文件API是HTML5,正在工作。@AaronDigulla-这需要信任
浏览器以正确确定文件类型。我希望浏览器要求底层操作系统和Windows至少使用文件扩展名。@Quentin:即使您试图解析文件,攻击者也可以通过使用命令行工具上传来轻松绕过此漏洞。因此,无论你怎么做,这都将是一个薄弱的防守,这将导致一个问题:你应该在这方面付出多少努力。@Aarondigula-见我对你答案的第一点评论。