2011-02-12 114 views
4

有什麼方法可以用來保護登錄頁面無法通過遠程PHP腳本使用CURL登錄?檢查引用者和用戶代理將不起作用,因爲可以使用CURL進行設置。理想的解決方案是在不使用驗證碼的情況下解決這個問題,這個問題的關鍵在於試圖弄清楚這是否可能。防止使用PHP CURL登錄到網站的遠程腳本

+3

你爲什麼想要禁止cURL訪問?如果這是一筆大交易,請添加reCAPTCHA。 –

回答

6

一種方法是包括一些JavaScript在您的登錄表單,並讓這個形式不可能被成功提交,除非該JavaScript有運行。這使得您的登錄表單僅適用於開啓了JavaScript的人員,這是CURL沒有的。如果必要的JavaScript是某種挑戰/響應每次都不相同(例如使用類似http://www.ohdave.com/rsa/這樣的東西來使其不重要),那麼表單中正確設置的值的存在就是JavaScript運行的良好證據。

雖然您將無法停止所有自動化腳本,但編寫用於驅動實際瀏覽器引擎的腳本非常容易,他們將通過此測試。

4

沒有任何方法可以簡單地阻止它。如果腳本知道用戶名和密碼,他們將能夠登錄。

您可以使用驗證碼,以便自動登錄無法讀取它,但這也會對實際用戶造成負擔。

如果您擔心它被用於嘗試和強制登錄,那麼在多次嘗試後可能需要一些附加信息。

  • 禁用帳戶,並需要通過電子郵件激活
  • 需要經過幾次不成功的嘗試
+0

很好的答案。您也可以在登錄頁面上使用JavaScript,並使用一些令牌來驗證cURL難以處理的情況,但最終無法阻止cURL,因爲它像Web瀏覽器一樣工作。請注意,要求JavaScript使用您的網站通常是一種罪過。 –

1

驗證碼,如果我已瞭解正確:

  • 你已經登錄頁面什麼執行登錄腳本
  • 登錄腳本被遠程cURL腳本攻擊...

解決方案 在登錄頁面放置帶有祕密唯一代碼的隱藏元素只能發生一次,在會話中保存此密碼,在登錄腳本中查看此代碼的會話,與發佈到腳本的內容進行比較,着手,明確會議...

更多關於主題:http://en.wikipedia.org/wiki/Cross-site_request_forgery

+1

您將無法使用會話阻止cURL。它只需要一個稍微複雜的腳本來接受和發送cookie。 – Jacob

0

cURL與任何其他客戶端(例如瀏覽器)沒有區別。你可以在一個隱藏的輸入字段中使用與會話綁定的nonce來防止直接發出POST請求,但是仍然有解決方法。限制每分鐘登錄嘗試的次數也是一個好主意,如果這是你擔心的事情,那麼使暴力攻擊變得更加困難。