|
|
|
| Прошу Вас конструктивно покритиковать, вот сделал авторизацию, что можно изменить и доработать прежде всего на предмет безопасности, ну и прочего
сам файл авторизации
<?php session_start(); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=windows-1251" />
<link rel="stylesheet" type="text/css" media="screen" href="css/guestbook.css" />
</head>
<body>
<?php
include "db/dbconnect.php";
$email_query = "SELECT password FROM users WHERE email='".$_POST['email']."'";
$name = mysql_query($email_query);
if(!$name)
{
echo mysql_error();
echo "Ошибка выполнения запроса!<br />";
echo "<a href='index.php'>Попробовать еще!</a>";
exit();
}
if(mysql_num_rows($name) > 0)
{
$password = mysql_result($name, 0);
if (md5(md5($_POST['password'])) == $password)
{
if(session_start())
{
$_SESSION['email'] = $_POST['email'];
$_SESSION['password'] = md5(md5($_POST['password']));
echo "Вы успешно вошли, страница будет перезагружена через 5 секунд!<br />";
echo "<meta http-equiv='refresh' content='5; url=guestbook.php'>";
echo "<a href='guestbook.php'>Нажмите ссылку, если Ваш браузер не поддерживает автоматическую переадресацию!</a>";
}
}
else
{
echo "Неправильный пароль!<br />";
echo "<a href='index.php'>Попробовать еще!</a>";
exit();
}
}
else
{
echo "Такой пользователь не зарегистрирован!<br />";
echo "<a href='index.php'>Попробовать еще!</a>";
exit();
}
?>
</body>
</html>
|
а в начале каждого фала делаю следующую проверку
<?php
session_start();
if( (!isset ($_SESSION['email'])) && (!isset ($_SESSION['password'])) )
exit()
?>
|
| |
|
|
|
|
|
|
|
для: Bvz
(12.12.2008 в 15:48)
| | Я бы добавил проверку массивов $_POST[] на достоверность | |
|
|
|
|
|
|
|
для: Bvz
(12.12.2008 в 15:48)
| | Скажите, а если строки
$_SESSION['email'] = $_POST['email'];
$_SESSION['password'] = md5(md5($_POST['password']));
......
if( (!isset ($_SESSION['email'])) && (!isset ($_SESSION['password'])) )
|
заменить на строки
$_SESSION['ok'] = 1;
......
if( (!isset ($_SESSION['ok']))
|
чем будет хуже? | |
|
|
|
|
|
|
|
для: Trianon
(12.12.2008 в 16:18)
| | не могу сказать изначально отталкивался от материала взятого здесь, возможно даже более компактно выглядит )) супер! | |
|
|
|
|
|
|
|
для: Bvz
(12.12.2008 в 16:25)
| | и еще мне не понятен смысл вот такой проверки
| |
|
|
|
|
|
|
|
для: Bvz
(12.12.2008 в 16:28)
| | >и еще мне не понятен смысл вот такой проверки
>
>
Это просто для компактности, проверка на "Открыта ли сессия! правда и вернет "1".
Я бы обработал логин и пароль:
$_POST['login'] = htmlspecialchars(stripslashes(trim($_POST['login'])));
if (!get_magic_quotes_gpc() )
{
$_POST['login'] = mysql_escape_string($_POST['login']]);
}
$_POST['login'] = str_replace("'","`",$_POST['login']);
|
убрать mysql_error() и $guery = @ mysql_query(); - ставить собаку если запрос вернет ошибку. Незачем пользователю видеть код ошибку. | |
|
|
|
|
|
|
|
для: Usta
(14.12.2008 в 02:24)
| | >Я бы обработал логин и пароль:
Вот этими строками
>$_POST['login'] = htmlspecialchars(stripslashes(trim($_POST['login'])));
> if (!get_magic_quotes_gpc() )
> $_POST['login'] = mysql_escape_string($_POST['login']]);
> $_POST['login'] = str_replace("'","`",$_POST['login']);
вы показываете что напрочь не понимаете назанчения использованный функций.
>убрать mysql_error() и $guery = @ mysql_query(); - ставить собаку если запрос вернет ошибку. Незачем пользователю видеть код ошибку.
Ага . И как в танке. | |
|
|
|
|
|
|
|
для: Trianon
(14.12.2008 в 02:37)
| | >вы показываете что напрочь не понимаете назанчения использованный функций.
Конечно не знаю, из головы придумал и написал. :))
И что здесь лишнее? функции убивает спец символы и ковычки.
Для данного случая email нужна ругулярка на правильность и все. | |
|
|
|
|
|
|
|
для: Usta
(14.12.2008 в 02:53)
| | Сначала разберитесь сами, а потом спорьте. Да и советуйте после того, так точно понимаете чо делаете. | |
|
|
|
|
|
|
|
для: Bvz
(12.12.2008 в 15:48)
| | Если Вы используете E-mail в качестве логина, то необходимо и достаточно проверить строку на корректность, например так:
<?
if(!preg_match("/^[a-z0-9_.-]+@([a-z0-9_]+.)+[a-z]{2,4}$/",$_POST['email']))
{
// Здесь выдать информацию об ошибке и лучше вернуть форму
}
else
{
// Далее по тексту
|
Что же касаемо всяких
htmlspecialchars(stripslashes(trim($_POST['login'])));
| то я в своё время тоже пытался надувать щёки, но мне вот здесь популярно разъяснили, кто редиску под землёй красит в красный цвет.
Не повторяйте моих ошибок, а то будет стыдно, как мне сейчас.
На счет собак - их вообще нужно применять в самых крайних случаях.
Для того, что бы не выводить ошибки на экран, нужно настроить .htaccess и писать их в логи, что бы потом можно было анализировать сбои.
И ещё, меня всегда мучает вопрос, а зачем делают вот это (оно меня всегда жутко раздражает):
<?
echo "Вы успешно вошли, страница будет перезагружена через 5 секунд!<br />";
echo "<meta http-equiv='refresh' content='5; url=guestbook.php'>";
|
? | |
|
|
|