用Java保护Web服务

时间:2011-08-17 04:36:39

标签: java php web-services

我想我更想找方向..
我主要是一个像我这样的网络开发者。我在apache PHP服务器上创建了一个web服务,我希望能够在不使用httprequest的情况下在java中调用该webservice。

我最初的想法是使用查询字符串传递API密钥来更新数据库记录。但是,我砸了我的头,意识到用户可以反编译我的代码并查看请求并在任何浏览器中使用它。这样做有安全的方法吗?

编辑:我认为我不够清楚。我想要做的是跟踪统计信息,如果用户获得了httprequest,他们可以进入浏览器并转到URL以弄乱数字。

请求只是查询字符串。比如www.example.com?apikey=aausy7556ze&stat1=this&stat2=that

我想要一种方式,这个请求要么在浏览器中不起作用,要么在没有httprequest的情况下以某种方式执行此操作。希望有道理。

4 个答案:

答案 0 :(得分:1)

让我们探讨一些不一定涉及混淆代码的选项(虽然它总是有帮助):

  1. 如果您不想使用HTTP,则必须定义自己的协议并使用直接套接字通信。这将确保没有人可以通过http访问您的服务。然而,这种方法很痛苦,特别是如果你已经内置了大量的web服务。
  2. 如果两台服务器(PHP和Java)位于同一内部网络上,则可以限制Web服务仅接受来自内部IP地址的请求。这样,外面没有人可以访问他们的浏览器并尝试通过浏览器访问您的Web服务。
  3. 另一种方法是使用客户端证书而不是安全的http。您要做的是在Java服务器上安装客户端证书(确保无法从Internet下载此证书)并将Web服务设置为仅通过https +客户端证书验证接受请求。然后,您将使用此客户端证书调用服务,并且仅在Web服务上接受具有有效证书的呼叫。对于设置,您可以查看http://www.modssl.org/docs/2.8/ssl_howto.html#ToC9处的说明(注意:我自己没有完成设置,但看到它有效。)。由于服务器需要只有Java客户端的客户端证书,因此没有其他人可以调用您的Web服务。请参阅此stackoverflow问题Java client certificates over HTTPS/SSL以设置Java以调用PHP webservices
  4. 现在,在所有三个中,#2是最简单的,可能就足够了。数字2也可以与#3组合以增加安全性。这足以阻止用户从浏览器访问您的服务。

答案 1 :(得分:0)

你想要隐藏什么?我想我明白你只是想确保流量是加密的。如果您正在编写客户端和服务,则不需要使用SSL,实际上这样做很浪费。只需保留服务器和客户端都知道的密钥,然后使用对称算法(例如AES)加密消息。您还可以在加密之前向纯文本添加一些检查以确保它没有被篡改(例如添加时间戳,消息哈希等)

答案 2 :(得分:0)

我认为你说的是​​你的服务器不能信任客户端提供正确的值,除非它是你自己的程序。因此,您需要一种方法来确保它是您自己调用服务的客户端而不是另一个恶意客户端。您担心您在客户端中嵌入的任何身份验证方法都可以进行逆向工程,然后恶意客户端可以使用相同的身份验证方法伪装成合法客户端。

我认为你所能做的只是投入一些默默无闻(就像你试图隐藏URL参数一样)但是没有真正的解决方案。所有常见的安全解决方案都假定身份验证凭据将不受恶意用户的控制。但在您的情况下,您无法信任客户端以保证身份验证凭据的安全。

答案 3 :(得分:0)

如果某人正在反编译你的java,那么所有的赌注都会被取消。您可能希望最好的是,混淆器会使您很难阅读反编译代码。