2012-09-06 81 views
3

this頁它說什麼是危險的約呼應SID

htmlspecialchars()可能爲了防止XSS相關的攻擊打印SID時使用。

如果您不使用htmlspecialchars()而打印SID,某人可能發生什麼樣的攻擊?

會話ID只能包含數字和字母。我錯過了什麼嗎?

回答

6

會話ID通常存儲在客戶端,因此它可以被改變(例如,在餅乾或GET PARAMS) - 一些腳本,甚至通過改變URL。

現在想象有人能夠更改cookie並將SID更改爲某些JS代碼將您重定向到其他某個地方。如果您將在未翻轉的頁面上打印該值,則每次都將重定向用戶,除非他將清除Cookie或禁用JavaScript。

換句話說,會話ID取自客戶端並且是不安全的(除非您將使用其他機制確保它未被更改(例如包含在某些PHP框架中的cookie簽名),所以您不能相信它不包含有害東西。

這與構建SQL查詢時不得將此值用作安全的原因相同(因此SID也是SQL注入的可能位置)。

+0

攻擊者如何能夠在別人的機器上更改它? – qwertymk

+1

通過將其置於URL:'yoursite.com/?PHPSESSID= '。你可以通過在你的php.ini文件中設置session.use_trans_sid = 0 session.use_only_cookies = 1'來禁用這個功能 –

+0

@qwertymk:對於同一個域,Cookies是相同的,所以控制其中一個頁面XSS)就足夠了。一個頁面易受攻擊,如果您在其他地方顯示SID,其他頁面也會受到影響(一個頁面會在Cookie中設置SID,其他頁面會顯示該頁面)。或者,如果來自URL的SID(如果在cookie中覆蓋SID,即使在使用沒有SID的URL的情況下也會導致問題發生)。 – Tadeck