簡體   English   中英

PHP SESSION在網站中是否安全,用於插入MySql數據

[英]Is PHP SESSION safe in website for inserting MySql data

我有一個網站,如果登錄成功,我會創建一個UserID的會話。

$email = mysql_real_escape_string($_POST["email"]);
if(LOGIN SUCCESSFUL) {
$_SESSION['userID'] = $email;
}

然后在我將任何數據輸入MySql的整個站點中,我從$_SESSION['userID']插入user_id

我不知道它有多安全,如果沒有,請告訴我任何安全的方法來做這一切。

它沒有任何根本性的錯誤 - 正如Barmar所說,你在$_SESSION存儲的任何東西都是合理安全的。 但是,在內部使用用戶的電子郵件作為主ID,並將用戶ID直接存儲在$_SESSION ,在架構上不是一個好主意。

更常見的方法是更抽象:在$_SESSION僅存儲會話ID。

該ID通常指向“會話”數據庫表。 該表中的每個會話都有一條記錄,其狀態 - 創建時間,超時時間,用戶是否登錄等。

理論上你可以將所有這些直接存儲在$_SESSION但是你沒有中心位置,你可以看到誰當前登錄,這對於故障排除很重要,並立即注銷所有人。

“sessions”表將包含一個用戶ID,該用戶ID指向單獨的“users”表。 該ID理想情況下是一個數字自動增量值,而電子郵件只是users表中的一列。 即使電子郵件發生變化,這也允許與其他表的關系保持不變。 使用該ID,您可以從該表中獲取電子郵件地址。

它更復雜但在邊緣情況下可以省去很多麻煩,例如當用戶更改其電子郵件地址時。

會話數據相當安全。 它保存在服務器上,而不是客戶端上。 客戶端唯一擁有的是會話ID字符串,它是服務器用於在其文件中查找會話數據的隨機字符串。

在數據庫中插入任何內容時,請確保它是安全的。 你已經在使用mysql_real_escape_string() ,這是一個很好的開始,因為它可以防止大多數常見的SQL注入問題(盡管不是全部!)。

由於您期望使用電子郵件地址,因此使用filter_var()也是明智之舉,因為它允許您檢查它是否實際上是有效地址。

if (filter_var($email, FILTER_VALIDATE_EMAIL))
{
    // Email is valid, do something with it.
}

一旦確定它是安全的,您可以在任何您喜歡的數據庫中使用它。 您不再需要為每個查詢轉義它,因為您已經確保它是安全的。 如果你真的想要安全,請使用用戶ID(而不是他們的電子郵件),因為數字值幾乎不可能放入垃圾郵件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM