[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Функция получения данных о пользователе из БД
ADiel
Я пишу свою CMS. Вот у меня вопрос в сторону безопасности. Когда пользователь вводит свой логин и пароль, функция авторизации вызвает функцию чтения логина и пароля из базы, последняя возвращает функции авторизации пароль в md5. Функция авторизации сравнивает пароль с введенным, если пароли совпадают, логинит пользователя.
Вот мне почкму то кажется, что очень не безопасно я сделал.



Спустя 1 минута, 10 секунд (7.04.2009 - 11:13) Joker написал(а):
Код в студию

Спустя 17 минут, 27 секунд (7.04.2009 - 11:30) ADiel написал(а):
Этот файл проверяет в системе юзер или нет. Выводит соотвествующую форму
PHP
<?
session_start();
################ ìîäóëü ëîãèíà ###############
if (!empty($_POST['login'])) {
$password $_POST['password'];
session_register("login");
$login $_POST['login'];
echo 
"Âû âîøëè â ñèñòåìó êàê <b>"$_SESSION['login']."</b>";
include 
"./templates/default/logout.html";
read_users($login);
}else{
include 
"./templates/default/login.html";
}
if (!empty(
$_POST['logout'])) {
session_unregister('login');
$login "";


А вот этот читает базу данных
PHP
function read_users ($login) { 
include 
"./modules/sql/sql_connect.php"
$query="select * from $sql_tables[users] where (login='$login')";
$res=mysql_query($query);
$number mysql_num_rows($res);
if (
$number == 0) { 
echo 
"Пашел ты =)";
} else { 
    while (
$row=mysql_fetch_array($res)) {
        
$usr_password $row['md5_password'];
                        
$usr_id $row['usr_id'];
        }
mysql_close($connect); 

return array (
$usr_id$usr_password);



ну а в функции логина просто обычнвм условием сравниваются md5 хеши. если правильно, чел входит

Спустя 5 часов, 5 минут, 23 секунды (7.04.2009 - 16:36) Alchemist написал(а):
ты прав, очень небезопасно сделал

Спустя 45 минут, 51 секунда (7.04.2009 - 17:21) FatCat написал(а):
Цитата (ADiel @ 7.04.2009 - 11:30)
$login = $_POST['login'];

Цитата (ADiel @ 7.04.2009 - 11:30)
$query="select * from $sql_tables[users] where (login='$login')";

Первый раз логином ввести одиночную кавычку, увидеть сообщение об ошибке, а в нем имя базы и имя таблицы.
Затем в поле логина ввести "qwerty'; свой sql-запрос к таблице;", и этот запрос будет выполнен.

Спустя 2 минуты, 39 секунд (7.04.2009 - 17:24) waldicom написал(а):
Цитата (FatCat @ 7.04.2009 - 15:21)
Цитата (ADiel @ 7.04.2009 - 11:30)
$login = $_POST['login'];

Цитата (ADiel @ 7.04.2009 - 11:30)
$query="select * from $sql_tables[users] where (login='$login')";

Первый раз логином ввести одиночную кавычку, увидеть сообщение об ошибке, а в нем имя базы и имя таблицы.
Затем в поле логина ввести "qwerty'; свой sql-запрос к таблице;", и этот запрос будет выполнен.

Так вроде множественные запросы не выполняются?

Спустя 1 час, 26 минут, 15 секунд (7.04.2009 - 18:50) ADiel написал(а):
Цитата (FatCat @ 7.04.2009 - 14:21)
Цитата (ADiel @ 7.04.2009 - 11:30)
$login = $_POST['login'];

Цитата (ADiel @ 7.04.2009 - 11:30)
$query="select * from $sql_tables[users] where (login='$login')";

Первый раз логином ввести одиночную кавычку, увидеть сообщение об ошибке, а в нем имя базы и имя таблицы.
Затем в поле логина ввести "qwerty'; свой sql-запрос к таблице;", и этот запрос будет выполнен.

Нет. ты не прав. вводимые данные переводятся в string. никакой ошибки mysql не будет и не было. долго проверял

Спустя 1 минута, 39 секунд (7.04.2009 - 18:52) ADiel написал(а):
Цитата (Alchemist @ 7.04.2009 - 13:36)
ты прав, очень небезопасно сделал

а подробнее можно? как нужно делать? я скажем так новичок.

Спустя 1 час, 53 минуты, 5 секунд (7.04.2009 - 20:45) Alchemist написал(а):
Подробнее тебе FatCat написал.

Спустя 6 дней, 20 часов, 2 минуты, 30 секунд (14.04.2009 - 16:48) glock18 написал(а):
2FatCat:
Класс! Очень эффектная sql injection.

Вопрос такой: есть два способа защиты от sql-injection (которые я знаю)
1. эксейпить строки от юзера.
2. bind параметры или так называемые подготовленные запросы.

2 гарантирует защиту от sql инъекций, а есть ли возможность сломать защиту mysql_real_escape_string?? То есть насколько 2 вариант вообще предпочтительней 1го?


Спустя 3 часа, 46 минут, 48 секунд (14.04.2009 - 20:34) Joker написал(а):
Я долго пытался понять логику но к сожелению так и не понел

для начало надо разобрать это:
PHP
<?
session_start();
################ ìîäóëü ëîãèíà ###############
if (!empty($_POST['login'])) {
$password = $_POST['password'];
session_register("login");
$login = $_POST['login'];
echo "Âû âîøëè â ñèñòåìó êàê <b>". $_SESSION['login']."</b>";
include "./templates/default/logout.html";
read_users($login);
}else{
include "./templates/default/login.html";
}
if (!empty($_POST['logout'])) {
session_unregister('login');
$login = "";


И так сначало проверяеться, введен ли логин если введен то сразу человека авторизует на сайте, но после того как авторизовало уже! делаеться выборка из базы пароля и ид пользователя с помощью функции read_users но даж не понятно зачем?! blink.gif и та выборка которая сделана не где не используеться, напрашиваеться вопрос зачем её делать?


_____________
Ищи меня тут (ilyaplot)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.