2011-12-10 207 views
5

我確定這個問題之前已經被問過了,但是我找不到一個能夠以對我有意義的方式解釋它的線程。如何「確保」AJAX呼叫?

我正在創建一個用Javascript編寫的書籤小工具/瀏覽器插件。該腳本調用api,從而有效地將用戶活動信息從一個站點發送到另一個站點。 (想想,當用戶發佈facebook狀態時發推文)

該站點將JavaScript加載到網站中。我使用的API需要使用API​​密碼生成MD5哈希。這是沒有問題的,我正在對我在別處託管的PHP腳本進行ajax調用,它返回正確的字符串。

問題是我不希望用戶能夠調用這個相同的腳本來生成他們自己的字符串,並將祕密嵌入到濫用API中。是他們的一種方式,我只能允許調用這個API,當我想讓他們?

或者我正在接近錯誤的方向。

回答

0

1)您應該在數據庫上打開一個令牌,例如GUID。

這個GUID將代表一些信息,只能執行一次(在表中放入一個名爲「isAlreadyuse」類型位的db字段)。

現在,

當AJAX會打電話給自己 - 你這個GUID發送到服務器。

服務器將看到如果GUID存在

併發射它的邏輯和更新thefield爲「1」。

3

您不能規定客戶端如何執行您的JavaScript。無法創建「安全」請求,或者確保它未被攻擊者修改。這是客戶端/服務器系統的性質。它自己的頁面可以使用GreaseMonkey進行修改,任何請求都可以使用TamperData進行修改或重播。

+0

重播攻擊可以防止...但這是假設它是一個重播,而不是[最初]允許的操作。 – 2011-12-12 00:09:09

+1

@pst如果你可以用JavaScript做到這一點,那麼攻擊者也可以用JavaScript做到這一點。 – rook