Ведение пользовательских сессий в PHP с безопасностью - PullRequest
2 голосов
/ 18 октября 2011

Я хочу знать, как разработчики профессионально поддерживают сессии между различными php-файлами, когда пользователь перемещается по сайту.

Я видел все учебные пособия, но я думаю, что они небезопасны.

Я только что создал php-файл для входа в систему и создал сеансы, связанные с идентификатором пользователя, именем пользователя в базе данных, и если установлен флажок Запомнить меня, он создаст файл cookie.

$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);  
$rememberMe = (int)$_POST['rememberMe'];


$row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM members WHERE usr='{$username}' AND pass='".md5($password)."'"));

if($row['usr'])
{
  $_SESSION['usr']=$row['usr'];
  $_SESSION['id']=$row['id'];
  $_SESSION['rememberMe']=$_POST['rememberMe'];

  if($rememberMe=="on")
   setcookie('zsCookie',$username, time()+7200);


}

Теперь допустим, я сделалпрофиль php.Как мне получить сессию пользователей?Я хочу знать, как это делают разработчики на таких сайтах, как Facebook.После получения этого сеанса, как я могу использовать его для получения значений из моей базы данных с полной безопасностью.

Также мой код проверки подлинности безопасен от внедрения SQL?

Ответы [ 3 ]

1 голос
/ 18 октября 2011

ваш запрос защищен от SQL-инъекций, хотя вызов mysql_real_escape_string для $ _POST ['password'] не нужен, поскольку при запуске через md5 () вывод будет содержать только буквенно-цифровые символы и не может содержать команды SQL.

Что касается сессий, это другое дело.Многие разработчики PHP используют сеансы PHP по умолчанию, используя такие функции, как session_start (), вызываемые на каждой странице, которая должна поддерживать сеансы, и сохраняя информацию, которая должна быть на каждой странице, в суперглобальном выражении $ _SESSION.Ознакомьтесь с документацией по PHP для сессий здесь: http://us3.php.net/manual/en/book.session.php

С учетом сказанного, реализация пользовательской сессии может обеспечить большую безопасность и эффективность, но для этого требуется гораздо больше работы.

1 голос
/ 18 октября 2011

Вы используете session_start() и продолжаете свою жизнь.

Ваш конкретный запрос безопасен, но помните, что когда вы запускаете строку через md5, любой экранирующий SQL исходный текст уничтожается -Выходной набор символов md5 не включает метасимволы sql, поэтому, если пароль пользователя содержит какие-либо метасимволы, вы теперь хэшируете не только его пароль, но и любые escape-символы, которые были добавлены. Вам придется делать это, избегая ВСЕГДА васвыполняйте операции с паролями, в противном случае вы получите одну точку, где PW конкретного пользователя не будет работать, потому что у него есть метачар SQL в pw.

1 голос
/ 18 октября 2011

Обычно вы используете СЕССИИ.

Вы можете сделать:

session_start();

в начале вашего скрипта и затем используйте:

$_SESSION['userid'] = $myuserid;

Затем, когда страница загрузится обратно, снова запустите start_session () и посмотрите в $ _SESSION, чтобы узнать, есть ли там ваш ID пользователя. Если он есть, загрузите данные пользователя из базы данных, используя этот идентификатор пользователя.

Например:

'SELECT * FROM users_table WHERE id = '.$_SESSION['userid'];

Обратите внимание, что есть много других соображений, касающихся безопасности, которые вы должны реализовать, для получения дополнительной информации обратитесь к разделу сессии в php.net:

http://www.php.net/sessions/

Удачи

...