2010-04-05 111 views
6

我有http://example.com/index.html,從HTML中使用JavaScript(的XmlHttpRequest)在http://example.com/json/?a=...&b=...如何限制對我的網絡服務的訪問?

調用Web服務的Web服務回報index.html信息的JSON數組,然後被顯示在index.html

由於任何人都可以查看源代碼index.html,看我如何調用JSON Web服務(http://example.com/json/),如何防止人直接叫我的JSON的web服務?

由於Web服務本質上是一個開放的到我的數據庫,我不希望人們濫用網絡服務,並開始直接從Web服務獲取數據,啓動DoS攻擊我的服務器,比獲取更多信息他們應該等。

UPDATE:

有沒有辦法來限制http://example.com/json/只請求來自同一服務器(IP)和http://example.com/index.html URL請求?

含義,不能http://example.com/json/檢測到請求人是($_SERVER['REQUEST_URI'] == http://example.com/index.html),只允許?

+2

嗯,你好?這正是你的疑問,我們已經回答了這裏:http://stackoverflow.com/questions/2576734/how-to-prevent-direct-access-to-my-json-service – Matchu 2010-04-05 13:46:16

+0

@Matchu,這是類似的,但不一樣的 – Hank 2010-04-05 13:52:46

+0

(因爲即使由約書亞·斯密所鏈接StackOverflow上發表評論指出)「如何防止我的JSON的服務直接訪問」 ==「我怎麼防止有人直接叫我的JSON Web服務?」。我確實注意到,這次你給出了理由,這意味着我們實際上可以給你合理的替代解決方案,但它仍然是同樣的問題。 – Matchu 2010-04-05 13:58:43

回答

0

有很多事情可以爲您的服務添加安全性。檢查此out

0

您無法正確保護可從客戶端JavaScript調用的Web服務。

您可以嘗試通過模糊處理技術(如javascript混淆)來實現安全性,但它不會阻止某人的動機。

4

有沒有簡單的方法來防止那。如果你的服務不是非常受歡迎,因此可能成爲拒絕服務攻擊的目標,我不會打擾。

我想到的一件事是使用一次性令牌(有效的10或100個請求)。

其他(樸素的)方法是檢查請求中是否存在X-Requested-With標頭,但當然這可能很容易被僞造。所以,我的建議是:什麼也不做,除非問題是真實的

還有一個想法:hash calc。這個想法是要求客戶端對每個請求執行相當昂貴的計算,同時驗證服務器端的計算是便宜的。對於單個請求,開銷非常小,但對於1000個請求而言,可能需要大量的CPU時間。我不知道hashcalc是否已被用於防止拒絕Web服務。幾年前它被提議爲反垃圾郵件措施,但從未流行。

+0

一次性令牌如何工作並從index.html文件生成? – Hank 2010-04-05 14:15:36

+0

好吧,攻擊者無論如何都可以重新獲取index.html以獲得新的令牌,所以既不是非常有效的對策,除非您限制每個ip每分鐘生成多少令牌。 – jholster 2010-04-05 14:47:22

+0

與HTTP_X_REQUESTED_WITH相關,我不相信以所有語言提供...例如PHP – Hank 2010-04-05 15:40:53

1

答案很簡單,使用CSRF保護。 http://en.wikipedia.org/wiki/Cross-site_request_forgery

簡單地說,當用戶來到你的網站(的index.php),把會話: CSRF =(RANDOM_HASH)

詢問JSON請求,example.com/json.php?hash=$_SESSION['CSRF']

而且在JSON。php檢查是否$_GET['hash']匹配$_SESSION['CSRF']

這樣簡單... 它是服務器端解決方案!

+5

這個想法是爲了防止攻擊者直接訪問服務。你的方法不會解決這個問題。攻擊者只需訪問index.html,獲取令牌,然後直接調用服務以獲取他想要的任何信息。 – 2010-04-05 14:35:06

+0

我認爲這將是一次性令牌。我怎樣才能做到這一點,而不需要index.php,我可以用index.html做到這一點嗎? – Hank 2010-04-05 14:49:10

+0

文件後綴無關緊要,但CSRF需要「動態」頁面,即不能用靜態文件完成。 – jholster 2010-04-05 15:04:48

1

我會跟蹤IP地址發出請求的。如果您看到來自相同IP的大量請求,則可以阻止它或提供驗證碼。