2010-08-10 81 views
1

好吧我有一个文件夹说... http://oldserver.net/file/index.jar如何保护文件,使其只能被java访问?

我怎么能够保护文件“index.jar”从常规Web浏览器下载?

我以前见过这样做,我只是想保护它免受网络浏览器的访问,并严格遵守java下载权限。

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

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

谢谢:)

+0

什么样的Java下载的?运行在哪里? – 2010-08-10 09:34:43

+0

也许有趣的是,当浏览器访问一个applet时,index.jar被下载并存储(缓存)到用户机器本地。该扩展名被删除,文件被重命名,但基本上该文件可用于本地访问。例如,在我的Windows机器上,它们被存储在 $ USER_HOME $ \ Application Data \ Sun \ Java \ Deployment \ cache – 2010-08-11 12:09:33

回答

6

你需要思考这个需求的具体含义 - 从服务器的角度来看,它如何判断传入请求是否是“java下载”?

总之,我不认为有一种方法可以确切地做你想做的事情。保证资源安全的经典方法是要求认证(即,您需要一个有效的用户名和密码才能获得index.jar文件),但听起来并不像您想要的那样。

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

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

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


如果你在你的问题,你只希望您的文件由特定 Java应用程序下载的意思,然后事情变得有点更加可行。您可以分发包含某种身份验证的应用程序(例如公钥/私钥对),并在请求index.jar时让服务器对此进行挑战。但即使如此,这仍然是可疑的 - 根据定义,Java应用程序必须包含足够的信息来进行身份验证;根据定义你必须公开分发这些信息;因此提取私钥并将其他应用伪装为Java应用并不困难。


基本上,我看不出有什么办法解决这个问题,因为你已经说过这个问题。如果有一个更狭窄的范围,你会乐意接受,你可能会想出一个可行的折中办法,但现在答案只是“不”。

1

从技术上讲,你不能。无论HTTP Java是什么请求,都可以创建另一个HTTP客户端程序。

但是,您可以使它稍微困难一些。您可以将文件放在HTTP摘要式身份验证的后面,并将密码包含在Java程序的JAR密码中,或者可以检查用户代理服务器端。

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

+0

谢谢Artefacto :) – Kyle 2010-08-10 10:03:22

0

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

0

如果您index.jar是非常重要的,不要使其可用于下载任何提到的方法。只要它可用于下载并最终在客户端计算机上,在Java内部或不在,它将被黑客入侵。 一些代码应该只能在服务器上运行。

1

你可以让你的文件只读,所以没有人可以修改实际的文件,但有一个问题,即使Java不能修改文件。

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

有Java中的函数来设置只读:

File newTempFile=new File("mytext.txt"); 
newTempFile.setReadOnly(); 
相关问题