2013-05-02 92 views
0

當前,當我想通過ajax從我的數據庫中獲取數據時,我使用一個外部php文件,它只是用mysqli從數據庫中獲取數據並回顯結果並將數據發送到ajax。限制web api到web服務器

我現在想改變成更有效的解決方案。我以爲我會先改變它,以便PHP文件輸出json數據以便將來的項目和更簡單的數據管理。但我不希望其他人能通過我的網站直接訪問這些數據。而且,由於您可以通過檢查網站來查看ajax連接,所以很容易找出答案。

我不希望它成爲每個人都可以訪問原始json數據並從中構建自己的應用程序/網站的地方。

還有哪些其他解決方案?只有我的網絡服務器應該能夠訪問它。

回答

1
  1. Estabilish會話當用戶訪問您的網站
  2. 回答任何AJAX調用

注意前檢查會議,這不是防彈的,但僅僅是一個起點。

+0

這將如何防止任何用戶訪問json結果?我只想讓我的Web服務器訪問它。 – 2013-05-02 15:53:25

+0

設置它只有你的服務器有會話。隨機的人可以一整天訪問它,只會被拒絕。 – Xeoncross 2013-05-02 15:56:36

+0

如何向服務器提供會話並通過ajax調用「發送」它? – 2013-05-02 15:58:02

0

沒有辦法隱藏允許使用請求它的文檔的用戶的json數據。換句話說:如果以允許的方式到達瀏覽器(使用您的站點的正常方式),您無法真正否認對數據的檢查。但是,你可以讓水蛭很難。如果你讓這個過程的時間長於構建一個自制數據庫所需的時間,那麼你就贏了。

  1. 減少您在一個請求中發送的數據量:不要發送比實際顯示的數據更多的數據。
  2. 將數據拆分爲分頁列表和詳細視圖。因此,爲了訪問完整的數據,leecher必須提出批量請求。然後,您可以限制通話/時間段/用戶(使用會話)。
  3. 確定用戶,如果您的項目允許。有許多方法可以減少不需要的註冊。此外,您可以使數據訪問限制(上述)更有效(您可以將計數器連接到用戶)。
  4. 您可以使用基於密鑰的加密。你可以在這裏找到一個可能的解決方案:Simple Javascript encrypt, PHP decrypt with shared secret key顯然,瀏覽器會解密數據,因此你需要把密鑰發送給它。這意味着:這個過程是可重複的,但是比簡單的檢查需要更多的時間。您可以改變加密參數,使其更加困難。

你可以做一些額外的步驟,使腳本榨取更困難。但是,這些不會使瀏覽器檢查變得更加困難:

  1. 檢查您從請求標頭中獲得的引用鏈接。它應該匹配您的文檔的網址。
  2. 如果X-Requested-Width頭沒有設置爲'XMLHttpRequest'($ _SERVER ['HTTP_X_REQUESTED_WITH'] =='XMLHttpRequest'),則不發送任何東西。這是安全的,所有瀏覽器都通過ajax請求發送它。
  3. 您可以將唯一的一次性參數添加到ajax url。您可以使用簡單的「腳本」標籤(var param ='uniqparam123';)通過PHP傳遞參數(或整個url)。您需要一個快速解決方案臨時存儲發送的密鑰一段時間。一旦ajax請求傳入,您可以匹配密鑰,從列表中刪除,然後發送數據。

希望你能挑選其中的一些。