使用PHP,你怎麼安全驗證的API調用,跨域,用以下標準:PHP驅動的API如何驗證真正的客戶端(引用者)跨域(知道頭可以被欺騙)?
- 必須從給定的domain.com/page被稱爲(沒有其他域)
- 必須有一個給定的鍵
一些背景:請回答前仔細閱讀...
我的web應用程序將通過如下所示的調用在客戶端的網站上顯示一個javascript小部件。所以我們正在談論一個腳本的跨域身份驗證,但僅限於真正的客戶端和一個給定的URL!
目前,Widget可以被CLIENT的網站包含,只需一行javascript。
例client-website.com/page/with/my-widget現在
<head>
...
<script src="//ws.my-webappserver.com/little-widget/?key=api_key"></script>
...
</head>
,在現實中,這並不直接調用JavaScript,但我的遠程服務器上的PHP腳本,它坐落在前面實際的JavaScript爲了做一些驗證的目的。
上述呼叫背後的PHP腳本做到這一點首先:
- 檢查該API密鑰($ _REQUEST [「鑰匙」])數據庫中的匹配用戶的記錄。
- 針對數據庫***中的記錄檢查引用者的URL($ _SERVER ['HTTP_REFERER'])。
這被簡化,但在本質上服務器看起來就像:
if ($_SERVER['HTTP_REFERER'] !== "http://client-website.com/page/with/my-widget")
&& $_REQUEST["Key"] == "the_long_api_key") {
header("Content-type: application/x-javascript");
echo file_get_contents($thewidgetJS_in_secret_location_on_server);
} else {
//pretend to be a 404 page not found or some funky thing like that
}
***窗口小部件只允許某些網站上的運行/頁
現在,這裏的問題:
- 關鍵是在客戶端,所以任何人都可以查看源代碼並獲得密鑰 個
- 引薦可以(通過捲曲)例如
還有一點障礙被欺騙: 我不能告訴客戶堅持一個PHP腳本中的關鍵他們的服務器上,因爲他們可以運行任何服務器邊語!
那麼,如何讓我的網絡服務安全,並只能通過給定的域/頁面訪問?
任何幫助將非常感謝!
ps:小部件會上傳一種下拉框 - 所以安全性很關鍵!
我已經在這之前聽說了很多。它歸結到你需要要麼驗證每一個用戶自己的,或相信其他網站的身份驗證和大力監測不良行爲(這是你在做什麼)。你可以做更多的JS打破業餘捲曲腳本,但除非你想確保每個請求的工作,幾乎沒有什麼可以做。 – dandavis