2010-03-19 174 views
1

我想阻止非瀏覽器客戶端訪問某些頁面/成功發出請求。如何阻止非瀏覽器客戶端提交請求?

網站內容被提供給認證用戶。會發生什麼是我們的用戶將他的憑據提交給我們的網站給第三方 - 它可以是另一個網站或移動應用程序 - 代表他執行請求。

說有用戶填寫併發送消息的表單。我可以保護此表單,以便處理提交的服務器可以判斷用戶是否直接從瀏覽器提交它?

我不想爲了可用性的原因使用CAPTCHA。我可以用一些JavaScript來做到嗎?

+0

你爲什麼要防止這種情況? – Kimvais 2010-03-19 10:29:48

+0

也許這是一個基於瀏覽器的遊戲,他想防止漫遊器? – 2010-03-19 10:34:22

+0

或「發送反饋」表單來獲取垃圾郵件......在這兩種情況下,都有一些強制更改密碼的whitleblower應用程序會更好。 – Kimvais 2010-03-19 10:40:06

回答

7

您可以使用javascript來提升欄,但是任何瀏覽器都可以使用自動化系統。在最糟糕的情況下,他們可以自動化瀏覽器,但幾乎肯定會有一些更簡單的方法來模擬操作。

在任何情況下,他們都可以記錄瀏覽器使用代理髮送的請求,並計算出JavaScript所做的任何技巧。

在什麼彈簧想到條件(提高標準)(使用javascript):

  1. 更改了提交的位置去。
  2. 在提交時更改字段名稱。
  3. 隱藏應該填寫的字段。
  4. 在提交時加密/模糊表單內容。
  5. 將GET更改爲POST。

另一個可用性問題是,任何禁用JavaScript的人都將無法使用該服務。這可能比驗證碼更能影響可用性。

+0

這就是我害怕聽到 - 但謝謝 – 2010-03-19 14:48:29

0

只有一種方法可以做到這一點,分析供應商字符串尋找被承認的瀏覽器,但如果有人僞造供應商字符串,他們沒有辦法避免提交。 - 你會打破形式

 
var isMoz = window.navigator.userAgent.match(/^Mozilla/)?true:false; 

用PHP,你可以嘗試的本地函數get_browser

+1

這仍然可以被欺騙。 – 2010-03-19 10:33:35

+3

不,不是。你很可能會破壞與__all__瀏覽器的兼容性,你不需要_explicitely_ list在這裏,繞過這個(比如'wget -U「Mozilla」')是非常簡單的。綜上所述; __這會比弊大於弊_ – Kimvais 2010-03-19 10:35:26

+0

我已經說過它可以被欺騙,我想最佳的解決方案應該是使用一個適當的htaccess配置文件來禁止那些似乎不合法的IMO。 – markcial 2010-03-19 10:39:27

1

有檢測HTTP代理沒有可靠的方法:

要如果導航儀是基於JavaScript的Mozilla瀏覽器知道任何情況下的某些瀏覽器 - 除非您可以強制用戶使用非常有限的一組瀏覽器(但這可能會被再次欺騙)。

IMO,試圖限制可以用來訪問表單的軟件,你應該確保有一個真正的人類控制該軟件。不幸的是,除非所有客戶都能訪問生物識別掃描儀,否則沒有比驗證碼更好的方法。

相關問題