2010-04-22 113 views
9

我有一個網站,使用會話cookie的安全性。它工作正常,所有,但現在任何Ajax請求都不安全。例如讓我們說一個用戶在一個頁面上。他們只能在會話中登錄時才能訪問此頁面 - 迄今爲止非常好。但現在他們要求Ajax請求是保護ajax請求

ajaxpages/somepage.php?somevar=something&anothervar=something 

是否有其他用戶決定只是去該鏈接本身(沒有會話),他們仍然得到同樣的AJAX輸出是爲那些登錄的人。

所以顯然我會發送一個ajax請求時通過會話數據。任何人有任何提示這樣做的最佳方式?我從來沒有做過這件事,寧願使用可信的方法,而不是自己做。

回答

5

ajax請求與網站的任何其他請求一樣工作,並且應該返回與非ajax請求相同的會話cookie。這在this question中指出。如果你沒有獲得會話cookie,也許別的東西是錯誤的。

+0

我需要幫助,避免重複評論,請參閱魯克的評論XD感謝基比 – 2012-10-03 14:18:14

2

在處理ajax請求的頁面上使用相同的安全檢查。

2

由於這是一個PHP頁面,我不明白爲什麼你不能在PHP端執行身份驗證。如果認證成功,則發回數據。否則,發回一條錯誤消息。 AJAX與其他任何請求沒有什麼不同。

4

擁有ajax輸出不一定是一個漏洞。它完全取決於正在傳輸什麼數據。我不確定你使用的是什麼平臺,但是大多數Web應用程序開發平臺都有一個會話變量,可以在請求之間保持狀態。

應該是已經到位是將用戶標記爲從服務器端登錄的方式。我PHP中,這看起來像:

if(!$_SESSION['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

(如果一個變量沒有設置它也是假的:

if(login($user,$password)){ 
    $_SESSION['logged_in']=true; 
} 

然後你可以在頭文件,如果他們被允許訪問該頁面查詢)

有幾件事情需要牢記。這是一個漏洞:

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
    die(); 
} 

用戶可以控制$ _COOKIE,這樣他們就可以告訴你,他們在登錄

另一個弱點:

if(!$_COOKIE['logged_in']){ 
    header("location: http://127.0.0.1/"); 
} 

頭()不殺死腳本。事實上,它仍然運行,所以它仍將輸出,但它不會顯示在瀏覽器中,你仍然可以使用的netcat /遠程登錄/ Wireshark來查看數據。

+0

我有一個問題在這裏,我不認爲有必要建立新的SO問題。 XD我通常使用exit ;.所以在這種情況下,更好地使用死亡或退出更好?任何建議讓我閱讀?關於死亡和退出的區別。謝謝。和一多,我很困惑,如果只檢查用戶登錄,這是容易被XSS?因爲任何人都可以將登錄用戶誘騙到xss站點以獲取數據。或者我對xss完全錯誤。再次感謝Rook XD – 2012-10-03 14:14:38

+0

@天龍我不知道你在問什麼。爲什麼死亡和退出之間會有區別?或者在回聲和打印之間?是的,xss可以用來劫持一個會話。我的帖子與xss無關。 – rook 2012-10-03 14:29:52

+0

oops。謝謝,我剛剛發現http://stackoverflow.com/a/1795031/805373解釋死亡和退出是一樣的。得到它。謝謝ROok – 2012-10-03 16:49:54