2009-06-30 136 views
2

我想在我的應用程序中添加一個額外的障礙,以防止通過javascript實現自動化,特別是當自動請求通過任何流行瀏覽器的XMLHttpRequest完成時。在ASP.NET中嗅探XMLHttpRequest(瀏覽器嗅探AJAX請求)的可靠方法?

我可以在ASP.NET中使用的XMLHttpRequest是否有可靠的跡象?

我想其他相關的問題是,難道XMLHttpRequest似乎是一個普通的人爲驅動的請求?因爲如果是這樣,那麼我想我就是傻瓜差事。

更新:我可能會太狹隘地措辭這個問題。目標是檢測:由其他人編寫的代碼,不是由普通瀏覽器提交的代碼,可能是機器人,可能不是來自我的內部網用戶,等等。到目前爲止,XHR和.NET WebRequest請求都浮現在腦海。

回答

4

你總是可以使用CAPTCHA,以確保人類負責提交請求。 recapt casset是免費的,有助於數字化書籍。

編輯:

如果你知道你正在試圖阻止什麼類型的惡意行爲,你可以開發用於檢測行爲簡單的算法。當檢測到這種行爲時,您可以使用CAPTCHA向客戶提出質疑,以確保人員負責。這種方法已經開始成爲慣例。在這個主題上看看post

4

不,沒有辦法做到這一點。很多像jquery這樣的流行庫都提供了一個特殊的頭文件(用於jquery的「x-requested-with」)來表明它是ajax調用,但這顯然是客戶端自願的。

必須假設你收到任何請求,可能是惡意的不幸

0

據我所知,XMLHttpRequest的所有實現一個頭添加到請求。

編輯:

對不起,標題(至少在PHP)是「HTTP_X_REQUESTED_WITH」

+0

這不是默認添加的,它是由客戶端庫自願添加的 – 2009-06-30 18:01:33

+1

但是,如果設置了該標頭,那麼它肯定是一個XMLHttpRequest。 – Thomas 2009-06-30 18:06:01

1

你可以執行一些偷偷摸摸的事情,但不幸的是它不會阻止每個人。例如,您可以在加載頁面時運行的開始/登錄頁面上放置一些JavaScript。此JavaScript會導致重定向,並可能會寫入發送回服務器的加密cookie值。使用XMLHttpRequest(或其他)顯然只是返回內容並且不執行任何JavaScript,因此您可以將這些請求過濾掉,因爲它們沒有由腳本設置的cookie值。在JavaScript上運行一些混淆會更好。

1

無法確定請求是否僞造。使用.NET HttpWebRequest類,您可以完美地模擬來自瀏覽器的任何有效的HTTP請求。但是,這取決於你的應用程序,你可以考慮下列之一:

  • 看HTTP頭,找到最明目張膽的企圖
  • 防止來自同一IP地址的過多請求在很短的時間內
  • 需要登錄
  • 只允許某些IP地址範圍
  • 驗證碼
  • 運行一些JavaScript代碼之前提交,使一個黑客使用.NET HttpWebRequest的困難(見標記Barnard的答案)

你必須找出爲什麼人們會試圖做到這一點,然後找到一種方法使他們很不方便。可能以這種方式,您可以輕鬆修改驗證程序,以便他們必須始終保持。

1

您可以使用request challenge tokens實施策略,與用於CSRF/XSRF保護的策略不同。另一種可能的選擇可能是使用身份驗證,但如果你有公共網站,這可能不是很友好。