2011-08-10 142 views
4

我希望能夠解決一些AJAX安全問題。所以這裏是我試圖包裹我的頭的情景。AJAX安全問題

可以說我正在使用AJAX向頁面請求一些半敏感材料。例如,我要將用戶的ID傳遞給一個php文件,並返回一些關於他們自己的信息。現在,是什麼阻止某人模仿這個Javascript請求,並將不同的ID傳遞給PHP腳本?

  • 有沒有什麼服務器可以防止這種情況發生?
  • DOM是否識別原本是「原始」的Javascript,
    或由服務器編寫,而不是客戶端Javascript?
  • 使用AJAX請求敏感資料時,會出現哪些安全問題?
  • 我正在使用suPHP,這是否對此類情況有任何影響?
+0

我很確定'AJAX'不能跨域訪問'PHP'文件。 – Phil

+0

你可以通過編寫php腳本來解決這個問題,該腳本執行跨域的東西並將其提供給AJAX – Im0rtality

+0

這是我一直在這裏閱讀的內容嗎? http://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest – grep

回答

10

Ajax調用與您所做的任何其他HTTP請求完全相同,只是它是異步的(它不會重新加載Web瀏覽器)。所以你應該使用你現在在你的網站上使用的任何認證。

這可能是Windows集成安全性,cookies等。基本上,您的PHP腳本只需驗證請求是否來自應用程序的有效用戶。

+0

如果它是應用程序的有效用戶,但他們試圖僞造獲取其他用戶信息的請求。此時SESSION檢查似乎毫無意義,因爲它是一個有效的用戶,試圖利用該應用程序。 – grep

+0

只要他們嘗試訪問其他用戶的數據,就給他們一個拒絕訪問權限。你的腳本應該知道用戶發出了什麼請求(這是認證)以及他們要求的信息。 – tskuzzy

2

AJAX本質上是不可靠的。您不能同時爲遠程使用提供資源並保持其完全安全。沒有100%可靠的方法來確定是否從您的客戶端JavaScript請求進來,或者是否有人僞造請求。

至多,你可以使它更難/更乏味做這樣的僞造。

+0

因此,如果請求只能在用戶登錄後才能發生,那麼在輸出任何AJAX請求的PHP文件之前,我是否應該求助於SESSION檢查?如果是這樣,只要終止腳本? – grep

+0

「沒有100%可靠的方法來確定請求是否來自您的客戶端JavaScript或者是否有人僞造請求。」 - 當然有。瀏覽器將發送所有包含Ajax請求的cookie,並在PHP端訪問用戶的$ _SESSION,因此您需要正常的身份驗證,就像您在任何其他頁面上一樣。 – AndrewR

+0

@andrewr:沒有說用戶不能僞造他們自己的請求,或者他們的會話令牌被盜,或者通過CSRF發出ajax請求。 –