2013-07-08 72 views
0

PHP會話和Cookie的新功能。

我有一箇舊的登錄腳本,我試圖升級到一個新的交叉子域功能。它全部用$_SESSION而不是$_COOKIE寫成。 (從我已經準備好的東西中,任何設置爲SESSION var的東西都不會跨越域,即使我已經爲整個域和根目錄設置了cookie參數)。

如果我做了搜索和替換爲$_SESSION,並更改爲$_COOKIE,我是不是將不得不做出很多語法的變化,或者說主要的操作方式相同?

+1

使用'__COOKIE'替換'$ _SESSION'登錄腳本可能會引入身份驗證繞過漏洞。你知道會話數據存儲在服務器端,cookie數據是所有客戶端(因此可以被篡改)? – MrCode

回答

1

這是一個非常糟糕的主意。對所有會話相關數據使用cookie意味着您可能發佈內部數據。所以,如果你想要一個cookie isAdmin = false,那麼你就可以讓攻擊者輕鬆獲得管理員權限。同樣所有的Cookies都會在每個請求中傳輸,這也會導致更多的流量。

請注意cookie也是用setcookie()函數設置的。 $ _COOKIE通常只讀。

+0

因此,對於佈局數據和簡單的非描述性用戶標識等非安全性非常脆弱的東西,Cookie會好嗎? – Plummer

+0

個人而言,我不會將用戶ID放入Cookie中。只需將會話密鑰(例如,隨機字符串)存儲在cookie中,並將所有其他信息保存在服務器上(例如,在數據庫中)。這樣,即使攻擊者獲得了這些信息,只要會話過期(如果您正在進行額外的檢查,例如IP,瀏覽器等,您可以立即使其對其他人毫無意義),這將毫無意義。 – 0b10011

+0

因此會生成一個會話密鑰,並將其保存到數據庫的臨時表中,並將所有用戶信息保存,然後在該會話過期時刪除臨時表? – Plummer

0

$_SESSION可用於讀取和寫入會話數據。 $_COOKIE用於閱讀。

與設置cookie的一個潛在問題是,它們必須在任何瀏覽器輸出之前使用setcookie設置...如果$_SESSION正在使用中或頁面渲染之後寫會話數據,這可能破壞你的代碼(因爲會話數據可以隨時設定)。

跨域會話將是一個安全漏洞,從它的聲音來看,跨域cookie在處理用戶憑證時會發生。

+0

我遵循你所說的話。我並沒有真正存儲任何構成安全威脅的數據,只要傳遞字詞和私人信息,但更像是用戶ID和佈局信息。沒有什麼是個人的或敏感的 – Plummer