Доброго времени суток, господа! На днях столкнулся с проектом, в котором авторизация выполнена следующим образом: index.php Код (Text): <?php session_start(); $login=$HTTP_POST_VARS['login']; $password=$HTTP_POST_VARS['password']; if (isset($login) && isset($password)) { $password=md5($password); $db = mysql_pconnect('localhost','user','password'); mysql_select_db('db'); $query = 'SELECT * FROM users WHERE login = "'.$login.'" AND PASSWORD = "'.$password.'"'; $result = mysql_query($query); if (mysql_num_rows($result) > 0) { $row = mysql_fetch_array($result); $HTTP_SESSION_VARS['id_user']=$row['id_user']; } } $id_user=$HTTP_SESSION_VARS['id_user']; ?> <html> <body> <?php if(isset($id_user)) { // Опустил разметку и код, если авторизация успешная } else { // Опустил разметку и код, если авторизация безуспешная , окно ввода логина/пароля } ?> </body> </html> Далее на остальных страницах написано следующее: Код (Text): <?php session_start(); $id_user=$HTTP_SESSION_VARS['id_user']; if ($id_user == '') header ("Location:./index.php"); // Далее следует разметка и код, если пользователь авторизирован ?> Что-то мне подсказывает, что безопасность хромает, хотя код работает. Разъясните, пожалуйста, что меня грызет? что тут не то? Заранее благодарен!
Странно что работает))) У тебя логин не фильтруется тут, сразу же попадая в запрос. Да и построение и обработка смущает.
Вот и мне странно, что работает. Но вот передо мной страница, пускает, если логин/пароль правильные. При попытке вручную вбить любую страницу, не авторизировавшись - вываливается на index.php с формой ввода логина/пароля, т.е. какбе работает. Писатель сего кода - студент техникума, ошибки в плане нефильтрации не удивляют. Вот и думаю - оставить "as is" или переделывать? Проект не публичный, но будет открытый.
на странице авторизации в поле логин напиши символ апострофа и нажми сабмит. все станет ясно. или так '1=1 должен по идее авторизовать.
PHP: $password=$HTTP_POST_VARS['password']; пароль шастает по эфиру в открытом виде. так уже давно никто не делает. считают хэш на клиенте и передают его. PHP: $password=md5($password); с таким же успехом пароль можно в базе хранить в первозданном виде.
Господа, я кажется не договорил или не правильно разъяснил. Интересовала правильность применения кода на других страницах.
провоцируешь очередной срач по поводу глобальных переменных?)) код вполне легален, только нужно следить, чтобы $id_user никем не перекрылась однажды.
Ну не зря в форум для новичков написал )). Сам я не претендую на звание PHP-программиста и видимо знаний не хватает, чтобы оценить то, что мне подсунули, потому и вопрошаю тут.
А какие у тебя тогда есть варианты? Попросить, чтоб другое подсунули? Начать латать дыры? Откровенно говоря, код - гагно. Ничего поражающего воображение. Допустим, доверять такой авторизации охрану частной информации я бы не стал.
Ну для закрытия обсуждений сделаем вывод: 1. авторизацию на index.php надо изменить (заглянем в http://www.php.ru/forum/viewforum.php?f=27) 2. остальные страницы в доработке не нуждаются. ммм?