2012-07-18 178 views
3

PHP有可能獲得請求的證書,特別是證書和CA上的網站名稱?PHP - 檢查請求的SSL證書

我想檢查一下對我的PHP文件的調用只能通過AJAX調用從我的網站進行。就像這樣:

  1. 用戶登錄到我的網站,然後使用HTTPS進行
  2. 用戶加載頁面https:// domain/mypage.php
  3. https:// domain/mypage.php在getinfo.php我一個AJAX調用https:// domain/getinfo.php

隨後的互動希望檢查請求的證書詳細信息,以確保請求是從我的網站發出的,即不是來自URL上的直接命中,也不是使用抓取工具。

可能嗎?

+4

簡答:沒有。不管你做什麼,總會有可能欺騙請求,看起來它來自Ajax。說實話,我甚至無法證實這種證書方法如何工作 - 相同的證書將用於所有請求,不管是否使用Ajax,除非您要求客戶端證書(這是一個總的PITA for你的用戶)你會看到的證書永遠是服務器端的證書,這顯然沒有告訴你什麼。考慮一下websockets,這會告訴你更多。 – DaveRandom 2012-07-18 13:00:22

+1

*服務器證書*將確保服務器的身份。由於你的服務器已經收到請求,我敢肯定你可以確定你的服務器本身就是真的。你想在這裏保護什麼? – deceze 2012-07-18 13:44:37

+0

我試圖確保對我的getinfo.php的調用來自我的網站,而不是來自試圖通過點擊URL來竊取我的(非常昂貴的)數據的人。所以我寧願不給人們一個他們可以訪問的URL並以JSON格式獲取數據,我想盡可能地讓它變得困難,並且至少排除他們從getinfo.php中獲取它 – BigMeat 2012-07-18 15:31:05

回答

0

我試圖確保對我的getinfo.php的調用來自我的網站,而不是來自試圖通過點擊URL來竊取我的(非常昂貴的)數據的人。

你的意思是你想確保呼叫您getinfo.php從正在訪問您的網站客戶端產生的?這是一個重要的區別。 「您的網站」不會產生請求,客戶端訪問網站是。無論客戶端在發送請求時是否仍然打開您的站點,都無法檢測到,每個請求看起來都與其他請求完全相同。

可能要求客戶端發送請求中的令牌,他在打開您的網站時必須獲得該令牌。通常這是一個cookie和/或會話ID。沒有有效的cookie /會話,您將不會回答客戶端。

這樣仍然可以在不打開頁面的情況下抓取數據,只需發出一個請求即可獲取cookie,另一個請求獲取數據。

對於所有意圖和目的,如果API /站點是公開的,數據也是如此。如果你真的想保護它,你必須要求用戶認證,並小心你給這些帳戶的人。這也使得審計和可能的禁止似乎刮掉你的數據的用戶。

0

另一種方式是一次性GET/POST令牌,就像您將令牌與有效期一起保存,然後您將令牌和腳本命令使用https://example.com/getinfo.php?t=token例如 您給客戶端數據並刪除令牌,以便沒有人可以使用已使用的令牌。

在任何情況下,您似乎都是通過SSL進行調用的,這是好的,因爲通過HTTP,令牌無論它的get或post是完全可見的,所以如果攻擊者關閉連接,然後嘗試得到的URL是不好的。

任何類型的惡意軟件都可以做同樣的事情,因爲在傳輸數據(令牌,甚至是你的「信息」)很可能在RAM中未加密,所以它可以在沒有人注意的情況下被拾取。