如何保护文件,以便只能通过java访问?

时间:2010-08-10 09:30:10

标签: java php security .htaccess web

好的我有一个文件夹说... http://oldserver.net/file/index.jar

我如何保护文件“index.jar”不被从常规网络浏览器下载?

之前我已经看过这个,我只是想保护它不被Web浏览器访问,并且只保留严格的java下载访问权限。

我的意思只是java下载访问,我可以简单地使用java下载器下载index.jar。但是我无法通过网络浏览器下载它。

我如何保护文件“index.jar”?

感谢:)

5 个答案:

答案 0 :(得分:6)

您需要考虑此要求的具体含义 - 从您的服务器的角度来看,它如何判断传入的请求是否是“Java下载”?

简而言之,我认为没有办法确切地完成你所追求的目标。保护资源的经典方法是通过要求身份验证(即您需要有效的用户名和密码来获取index.jar文件),但这听起来并不像您想要的那样。

请记住,Java只是简单地向连接发送HTTP请求(或其他知道如何说话的协议)。 任何其他程序都可以发送相同的请求,因此根本无法以您指定的方式强制执行此限制。

可能模拟你所追求的是一种方法是不通过HTTP访问index.jar,因此默认情况下浏览器无法获取它,然后通过Java中的其他协议访问它(例如FTP,SFTP,等等)。虽然如上所述,任何可以说这个新协议的工具都可以下载该文件。

另一种方法是查找特定于Java的标头,例如User-Agent字段(假设这个字段填充了可识别的内容)。但同样 - 这不安全,因为任何工具都可以通过相同的标头发送并模拟java下载。


如果您的问题意味着您只希望通过特定的 Java应用程序下载文件,那么事情会更加可行。您可以分发包含某些身份验证的应用程序(例如公钥/私钥对),并在请求index.jar时对此进行服务器质询。但即便如此,这仍然是可疑的 - 根据定义,Java应用程序必须包含足够的信息来进行身份验证;根据定义,您必须公开发布此信息;因此,提取私钥并将其他应用程序伪装成您的Java密码并不困难。


基本上,鉴于你所说的限制,我无法看到这个问题。如果有一个较窄的范围,你愿意接受你可能会提出一个可行的妥协,但现在答案就是“不”。

答案 1 :(得分:1)

从技术上讲,你做不到。无论HTTP Java做出什么请求,都可以制作另一个HTTP客户端程序。

然而,你可以使它稍微困难一些。您可以将文件置于HTTP摘要认证之后,并在Java程序的JAR中包含密码或者可以检查用户代理服务器端。

参见例如get_browser()和Apache 2 authorization and authentication

答案 2 :(得分:1)

您可以将文件设为只读,以便没有人可以修改实际文件,但是出现了一个问题,即使java也无法修改该文件。

因此,如果您需要修改文件,则需要创建一个具有相同扩展名的新文件,并将整个数据从主文件复制到新文件并删除主文件并修改新文件并将新文件的名称更改为旧文件名。

java中有一个函数设置为只读:

File newTempFile=new File("mytext.txt");
newTempFile.setReadOnly();

答案 3 :(得分:0)

您可以创建一个为您的文件提供服务的Web应用程序。在这里,您可以检查请求中的用户代理字符串,并确定该用户代理字符串是否提供该文件。为此,您的“java下载程序”必须具有可识别的用户代理字符串,并且您的应用程序必须“知道”它。 当然,任何知道这一点的坏人都可以让他的浏览器向你发送相同的用户代理字符串,所以这不太安全: - /

答案 4 :(得分:0)

如果index.jar非常重要,请不要在任何提到的方法中下载它。只要它可以下载并最终在客户端计算机上,无论是否在Java内部,它都将被黑客攻击。 有些代码只能在服务器上运行。