Raj*_*eev 8 java security file-io file-upload http-headers
我有一个用例,我们允许用户上传文件.现在在后端java(控制器从http请求中提取文件并检查),我想检测用户是否上传任何可执行文件.如果他上传,我必须丢弃该文件.我用谷歌搜索它但找不到一个好的解决方案.有人建议验证扩展名(.exe).但我不知道它将过滤exe文件到底有多远.我想完全阻止上传的可执行文件.
如果您有任何人遇到过这种情况或有解决方案,请告诉我.我很感激你.
如果您能指出任何JAVA实现或Java API或算法来完成这项工作,我会更高兴.
dev*_*obf 11
我怀疑,除了你已经提到的扩展检查方法之外,没有办法抓住每一个可能的情况.可执行文件最终是机器指令的序列,这使得它们在很大程度上与任何其他数据无法区分.
尽管如此,有些东西你可以在某些类型的可执行文件中寻找.例如:
4d5a(ASCII字符MZ)开头7f454c46cafebabe(十六进制,而不是ASCII!)开头.feedface(再次为十六进制)我建议你创建一个FileInputStream或类似的,并读取文件的前几个字节,检查这些神奇的数字.它没有检测到任何包含可执行代码的文件,但它应该阻止允许这些标准可执行格式的文件,我认为这是你所希望的.
例如:
public static boolean isExecutable(File file) {
byte[] firstBytes = new byte[4];
try {
FileInputStream input = new FileInputStream(file);
input.read(firstBytes);
// Check for Windows executable
if (firstBytes[0] == 0x4d && firstBytes[1] == 0x5a) {
return true;
}
return false;
}
catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
还要注意,可能会出现误报,拒绝不可执行的文件.我不知道您打算上传什么类型的文件,因此您应该考虑这种情况发生的可能性.
| 归档时间: |
|
| 查看次数: |
7689 次 |
| 最近记录: |