2009-11-19 55 views
11

我想知道是否有人遇到過任何技術,以減少通過服務器上的JSON類型服務暴露數據的機會(旨在提供AJAX功能)被外部代理收穫。減少AJAX/JSON服務數據收集的技術

在我看來,如果你說Flash客戶端使用數據,問題並不那麼困難。然後你可以發送加密數據到客戶端,這將知道如何解密它。由於Javascript源代碼的開放性,AJAX雖然也有相同的方法,但這似乎是不可能的。

有沒有人在這裏實施了一個聰明的技巧?

無論採用哪種方法,它都應該允許真正的AJAX功能使用數據。

請注意,我並沒有真正在說保護'敏感'信息,奇數記錄泄漏不是問題。相反,我正在考慮停止整個數據庫被機器人(一次性或逐漸逐漸增加)佔用的情況。

謝謝。

回答

7

首先,我想清楚了這個:

在我看來,這個問題是不是 那麼難,如果你有說一個Flash 客戶使用了該數據。然後你可以發送加密數據到 客戶端,這將知道如何解密它。同樣的方法似乎 不可能與AJAX,雖然,由於 Javascrip 源的開放性質。

這將是很明顯的信息被髮送加密到Flash客戶端&它不會是很難的攻擊者找出從您的Flash編譯的程序是怎麼被用於此 - 複製&得到所有該數據。

如果數據確實碰巧具有您正在考慮的值,那麼您可以依賴上述內容。

如果這是公開信息,那麼接受&不要與它對抗 - 而是找到利用它的方法。

如果這是您只公開給一組用戶的信息,請確保您有相應的認證/安全通信。跟蹤其他人所說的使用情況,並採取相應的措施,

+2

「如果這是公開的信息,那麼接受並且不要與之抗衡 - 而是要找到利用它的方法。」 +1 – 2009-11-25 04:19:59

+0

是的,那句話本身就值+1。 – anddoutoi 2009-11-27 16:55:42

1

如果您有一個內部Memcached盒,您可以考慮使用一種技術,爲每個IP創建一個條目,並在一小時內到達您的服務器。然後每次IP擊中AJAX端點時增加該值。如果該值超過特定閾值,則嘗試連接。如果這個值在Memcached中過期,那麼你知道它沒有被「收回」。

1

這不是具有概念驗證的具體答案,但也許是您的一個起點。您可以創建一個提供加密/解密功能的JavaScript函數。 JavaScript需要動態構建,並且您將包含會話唯一的加密密鑰。在服務器端,您將擁有一個加密服務,該服務使用會話中的密鑰在傳遞它之前加密JSON。

這樣至少可以防止某人聆聽您的網絡流量,從您的數據庫中提取信息。

雖然我與kdgergory,它聽起來像你的數據太開放。

1

這裏有各種各樣的建議:

  1. 每個沿贖回要求發行令牌AJAX請求。過期令牌。
  2. 跟蹤來自每個客戶端的查詢數量,並基於您的站點的預期正常使用情況來遏制過多使用情況。
  3. 查找使用中的模式,例如順序查詢,請求尖峯或比人類能夠進行的查詢更快的查詢。
  4. 檢查用戶代理。許多機器人不能完全複製瀏覽器的用戶代理信息,並且可以使用此方法消除對數據的編程式刮取。
  5. 一旦超過請求閾值,更改網站的前端組件以重定向到驗證碼(或其他人體驗證機制)。
  6. 修改您的邏輯,以便以幾種不同的方式返回respsonse數據,以使解析所需的代碼複雜化。
  7. 朦朧你的客戶端JavaScript。
  8. 阻止違規客戶端的IP。
0

機器人通常不會解析Javascript,因此您的ajax代碼不會立即執行。如果他們做到了,機器人通常也不會保留會話/ cookie。知道這一點,如果沒有有效的會話/ cookie(顯然在父頁面上的請求事先在服務器端設置),就可以拒絕請求。

雖然這並不能保護您免受人爲傷害。最安全的方式是限制用戶使用登錄名/密碼進行訪問。如果這不是你的意圖,那麼你必須忍受這是一個public應用程序。你當然可以掃描日誌和主要黑名單與IP地址和useragents,但這是極端的。