代码之家  ›  专栏  ›  技术社区  ›  Kyle

如何保护一个文件,以便它只能被Java访问?

  •  1
  • Kyle  · 技术社区  · 15 年前

    好吧,我有个文件夹说… http://oldserver.net/file/index.jar

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

    我以前见过这种情况,我只是想保护它不受Web浏览器的影响,并且只允许严格的Java下载。

    我所说的Java下载访问是指,我可以简单地使用Java下载器下载索引x.jar。但我不能通过网络浏览器下载。

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

    谢谢)

    5 回复  |  直到 13 年前
        1
  •  6
  •   Andrzej Doyle    15 年前

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

    简言之,我不认为有什么方法可以做到你想要的。保护资源的经典方法是要求身份验证(即,您需要一个有效的用户名和密码来获取index.jar文件),但这听起来不像您想要的那样。

    请记住,Java只是简单地发送HTTP请求(或者它知道如何发言的其他协议)来降低连接。 任何其他程序都可以发送相同的请求 ,所以完全没有办法按照您指定的方式强制执行这个限制。

    一种可能模拟你正在进行的方法是不通过HTTP访问索引.jar,因此浏览器在默认情况下无法访问它,然后通过Java中的另一个协议(例如FTP、SFTP等等)访问它。尽管如上所述,任何能说出这个新协议的工具都可以下载这个文件。

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


    如果你的问题是你只希望你的文件被 具体的 Java应用程序,然后事情变得更加可行。您可以分发一个包含一些身份验证(例如,公钥/私钥对)的应用程序,并在以下情况下对其进行服务器质询: index.jar 请求。但即使如此,这也是可疑的——根据定义,Java应用程序必须包含足够的信息来进行身份验证;根据定义,您必须公开发布该信息;因此,提取私钥并将其他应用程序伪装成Java应用程序并不困难。


    基本上,考虑到你所说的限制,我看不出有什么办法可以解决这个问题。如果有一个更窄的范围,你愿意招待你可能会想出一个可行的妥协,但现在的答案是简单的“不”。

        2
  •  1
  •   Artefacto    15 年前

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

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

    参见 get_browser() Apache 2 authorization and authentication .

        3
  •  1
  •   Marlon    13 年前

    你可以让你的文件只读,这样就没有人可以修改实际文件,但出现了一个问题,即使Java无法修改文件。

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

    在Java中有一个函数设置只读:

    File newTempFile=new File("mytext.txt");
    newTempFile.setReadOnly();
    
        4
  •  0
  •   Ridcully    15 年前

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

        5
  •  0
  •   hidralisk    15 年前

    如果index.jar非常重要,请不要使用上述任何方法下载它。一旦它可以下载并在客户端计算机上结束,在Java内部或没有,它就会被黑客攻击。 一些代码应该只在服务器上运行。