Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: прошу конструктивной критики по авторизации на сайте
 
 автор: Bvz   (12.12.2008 в 15:48)   письмо автору
 
 

Прошу Вас конструктивно покритиковать, вот сделал авторизацию, что можно изменить и доработать прежде всего на предмет безопасности, ну и прочего

сам файл авторизации

<?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($name0);
        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()

?>

  Ответить  
 
 автор: Silentium   (12.12.2008 в 15:53)   письмо автору
 
   для: Bvz   (12.12.2008 в 15:48)
 

Я бы добавил проверку массивов $_POST[] на достоверность

  Ответить  
 
 автор: Trianon   (12.12.2008 в 16:18)   письмо автору
 
   для: 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']))


чем будет хуже?

  Ответить  
 
 автор: Bvz   (12.12.2008 в 16:25)   письмо автору
 
   для: Trianon   (12.12.2008 в 16:18)
 

не могу сказать изначально отталкивался от материала взятого здесь, возможно даже более компактно выглядит )) супер!

  Ответить  
 
 автор: Bvz   (12.12.2008 в 16:28)   письмо автору
 
   для: Bvz   (12.12.2008 в 16:25)
 

и еще мне не понятен смысл вот такой проверки


            if(session_start()) 

  Ответить  
 
 автор: Usta   (14.12.2008 в 02:24)   письмо автору
 
   для: Bvz   (12.12.2008 в 16:28)
 

>и еще мне не понятен смысл вот такой проверки
>
>

>            if(session_start()) 
>

Это просто для компактности, проверка на "Открыта ли сессия! правда и вернет "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(); - ставить собаку если запрос вернет ошибку. Незачем пользователю видеть код ошибку.

  Ответить  
 
 автор: Trianon   (14.12.2008 в 02:37)   письмо автору
 
   для: 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(); - ставить собаку если запрос вернет ошибку. Незачем пользователю видеть код ошибку.
Ага . И как в танке.

  Ответить  
 
 автор: Usta   (14.12.2008 в 02:53)   письмо автору
 
   для: Trianon   (14.12.2008 в 02:37)
 

>вы показываете что напрочь не понимаете назанчения использованный функций.

Конечно не знаю, из головы придумал и написал. :))
И что здесь лишнее? функции убивает спец символы и ковычки.
Для данного случая email нужна ругулярка на правильность и все.

  Ответить  
 
 автор: BinLaden   (14.12.2008 в 13:30)   письмо автору
 
   для: Usta   (14.12.2008 в 02:53)
 

Сначала разберитесь сами, а потом спорьте. Да и советуйте после того, так точно понимаете чо делаете.

  Ответить  
 
 автор: Николай2357   (14.12.2008 в 07:02)   письмо автору
 
   для: 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'>";

?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования