2011-08-17 96 views
0

我認爲我更多的尋找方向..
我主要是一個web開發者,如此裸露與我。我在apache PHP服務器上創建了一個web服務,我希望能夠在不使用httprequest的情況下在java中調用該web服務。在Java中安全的webservice調用

我最初的想法是使用查詢字符串來傳遞API密鑰來更新數據庫記錄。但是,比我的腦袋,我意識到用戶可以反編譯我的代碼,並看到請求,並在任何瀏覽器中使用它。有沒有一個安全的方法來做到這一點?

編輯:我覺得我沒有足夠清晰。我試圖做的是跟蹤統計數據,如果用戶獲得了httprequest,他們就可以進入瀏覽器並轉到URL以混淆數字。

請求只是查詢字符串。像www.example.com?apikey=aausy7556ze & STAT1 =這個& STAT2 =該

我想辦法,這個要求既不能在瀏覽器中運行或以某種方式做到這一點沒有一個HttpRequest。希望這是有道理的。

+0

或者只是嗅探端口呼叫;這絕不可能無形地完成 – 2011-08-17 04:43:26

+0

我幾乎可以肯定,如果你想安全地做到這一點,你需要使用SSL來完成。 – javamonkey79

+0

我在那裏添加了更多信息。不確定我第一次非常清楚。 – Tyler

回答

1

讓我們來探討,這並不一定涉及混淆你的代碼(雖然它總是幫助這樣做)幾個選項:

  1. 如果你不想使用HTTP,你必須非常定義自己的協議並使用直接套接字通信。這將確保沒有人可以通過http訪問您的服務。然而,這種方法是一個痛苦的方法,特別是如果你已經有大量的web服務已經建立了。
  2. 如果兩臺服務器(PHP和Java)位於同一內部網絡上,則可以限制Web服務僅接受來自內部IP地址的請求。這樣,外部沒有人可以訪問他們的瀏覽器並嘗試通過瀏覽器訪問您的Web服務。
  3. 另一種方法是通過安全http使用客戶端證書。您要做的是在Java服務器上安裝客戶端證書(確保無法從互聯網上下載此證書),並將Web服務設置爲僅通過https +客戶端證書驗證接受請求。然後,您將使用此客戶端證書調用服務,並且只有具有有效證書的調用纔會被接受。對於設置你可以檢查指示在http://www.modssl.org/docs/2.8/ssl_howto.html#ToC9(注:我沒有做自己的設置,但看到它的作品。)。由於服務器需要只有Java客戶端的客戶端證書,所以沒有其他人可以調用您的Web服務。請參閱本計算器問題Java client certificates over HTTPS/SSL設置您的Java調用PHP Web服務

現在,所有三個,#2是最簡單的,可能足以讓你的目的。號碼2也可以與#3結合使用以增加安全性。這應該足以阻止用戶從瀏覽器訪問您的服務。

+0

這是我正在尋找的那種答案。但是,在運行Java服務器的服務器上放置證書可能會很麻煩,因爲有多個。他們也不在同一臺服務器上。但是,我對socket協議感到好奇。如果你有一個很好的例子的鏈接。否則,我現在會做一個快速的谷歌。 – Tyler

+0

您基本上是通過套接字編程創建您自己的客戶端 - 服務器通信方式。除HTTP之外的其他已知協議是用於電子郵件的SMTP協議。請查看http://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol,特別是關於服務器和客戶端如何通信的「SMTP傳輸示例」部分。所有SMTP客戶端都遵循此協議。對於您的情況,您將創建您自己的請求/響應協議。但是請注意,如果這個協議被破壞了,你可以嘗試破解它(通過捲曲或其他方法),所以一定要使用加密來傳遞信息 – momo

+0

是的,我做了一些研究。應該可以工作。謝謝! – Tyler

0

你想隱藏什麼?我想我明白你只是想確保流量是加密的。如果你正在編寫客戶端和服務,你不需要使用SSL,事實上這樣做是浪費的。只需保留服務器和客戶端都知道的密鑰,然後使用對稱算法(如AES)對消息進行加密。你也可以在加密之前添加一些檢查到純文本,以確保它沒有被篡改(例如添加時間戳,消息哈希等等)

0

我想你說的是你的服務器不能信任客戶端提供正確的值,除非它是您自己的程序。所以你需要一種方法來確保它是你自己的客戶端調用服務而不是另一個惡意客戶端。您擔心您嵌入客戶端的任何身份驗證方法都可能被反向設計,並且惡意客戶端可以使用相同的身份驗證方法僞裝成合法的客戶端。

我認爲你所能做的只是拋出一些默默無聞(就像你試圖通過隱藏URL參數來做),但是這個問題沒有真正的解決方案。所有常用的安全解決方案都假定認證證書將不受惡意用戶的使用。但在你的情況下,你不能相信客戶端保持身份驗證憑證的安全。

+0

你幾乎擊中了第一段中的頭部。我不能相信用戶不會混淆數字。我正在研究默默無聞的圖書館。 – Tyler

0

如果有人正在反編譯你的java,所有的投注都關閉。你可以期待的最好的方式就是混淆器會使你足夠難以閱讀你的反編譯代碼。