Snoopik

Snoopik
Рейтинг
29
Регистрация
20.02.2009

Класс


<?php
class Func
{
var $search = array (
"'<script[^>]*?>.*?</script>'si",
"'<[\/\!]*?[^<>]*?>'si",
'["]',
"'([\r\n])[\s]+'",
"'&(quot|#34);'i",
"'&(amp|#38);'i",
"'&(lt|#60);'i",
"'&(gt|#62);'i",
"'&(nbsp|#160);'i",
"'&(iexcl|#161);'i",
"'&(cent|#162);'i",
"'&(pound|#163);'i",
"'&(copy|#169);'i",
"'&#(\d+);'e");
var $replace = array (
"",
"",
"",
"\\1",
"\"",
"&",
"<",
">",
" ",
"chr(161)",
"chr(162)",
"chr(163)",
"chr(169)",
"chr(\\1)");
function parser($txt)
{
return preg_replace($this->search, $this->replace, $txt);
}
}
?>

Код авторизации:


<?
session_start ();
session_register ( 'aut' );
session_register ( 'login' );



$fun = new Func();
// Проверяем заполнены ли строки Логин и Пароль
if (! empty ( $_POST ['logi'] ) or ! empty ( $_POST ['pass'] )) {
// Проверяем через класс
$logi = $fun->parser( trim ( $_POST ['logi'] ) );
$pass = $fun->parser( trim ( $_POST ['pass'] ) );

$query = "SELECT * FROM users WHERE login = '" . mysql_real_escape_string($logi) . "' LIMIT 1";
$result = mysql_query ( $query );
$num = mysql_num_rows ( $result ) or die(mysql_error());
$row = @mysql_fetch_array ( $result );
if ($num == '0') {
$_SESSION ['aut'] = '0';
$_SESSION ['login'] = 'Гость';
echo 'Извините, но такого пользователя не существует.';
echo '<meta http-equiv="refresh" content="3 url=/usercp/">';

} else {
if ($row ['pass'] != md5 ( $pass )) {
echo 'Извините, но пароль не верный!';

} else {
if ($row ['adm'] == '1') {
$_SESSION ['aut'] = '2';
$_SESSION ['login'] = $logi;
echo 'Вы вошли в систему как администратор ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/admin/">';

} else {
$_SESSION ['aut'] = '1';
$_SESSION ['login'] = $logi;
echo 'Вы вошли в систему как пользователь ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/main/">';

}
}
}
} else {
echo 'Заполнителя правильно форму входа.';

}
?>

Это как из вариантов)

p.s понравилось, поставь репу)

Один из людей заказывал просто дизайн, на строительную тематику.

Вот что получилось.

Строо не судите, смотрите тема, как называется "дизайнер - новичок".

Обновил макет

Вот

Можно за отзыв сайт?

RealDevil:
Покажите что вы умеете, если не очень - лучше еще подучиться, а потом предлагать свои услуги. Дабы не нахвататься лишней критики, как обычно бывает на форумах:)

Деаю сейчас для одного выложу...покажу..=)

Cranking:
Snoopik, не тратьте чужое время, сначала научитесь рисовать, может это вобще не ваше.
Нарисуйте для себя 5 баннеров, 5 логотипов, 5 дизайнов разных тематик...

Для себя я рисовал!

dnlake:
А не проще ли хранить в базе хэш пароля и логина, а после определения, что оба поля заполнены шифровать их и сравнивать с хэшем из базы? При таком алгоритме вообще не нужны проверки, из-за чего ощутимо повысится производительность.

Посмотрите скрипт..с паролями так сделано..только без соли

Вот итоговый вариант


$fun = new Func();
if (! empty ( $_POST ['logi'] ) or ! empty ( $_POST ['pass'] )) {

$logi = $fun->parser( trim ( $_POST ['logi'] ) );
$pass = $fun->parser( trim ( $_POST ['pass'] ) );

$query = "SELECT * FROM users WHERE login = '" . mysql_real_escape_string($logi) . "' LIMIT 1";
$result = mysql_query ( $query );
$num = mysql_num_rows ( $result ) or die(mysql_error());
$row = @mysql_fetch_array ( $result );
if ($num == '0') {
$_SESSION ['aut'] = '0';
echo 'Извините, но такого пользователя не существует.';
echo '<meta http-equiv="refresh" content="3 url=/usercp/">';

} else {
if ($row ['pass'] != md5 ( $pass )) {
echo 'Извините, но пароль не верный!';

} else {
if ($row ['adm'] == '1') {
$_SESSION ['aut'] = '2';
echo 'Вы вошли в систему как администратор ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/admin/">';

} else {
$_SESSION ['aut'] = '1';
echo 'Вы вошли в систему как пользователь ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/main/">';

}
}
}
} else {
echo 'Заполнителя правильно форму входа.';

}
banshee(oleg):
Мдааа )))
Ну вы данные формы через POST передаете скрипту. Вот и передадут то, что я написал.
Необходимо кавычки слешить с помощью addslashes или аналогов.

Код выше лучше, т.к. дальше все-равно идет проверка пароля (просто пройти авторизацию без пароля, как в скрипте из вашего первого поста не удастся), но по-прежнему содержит скулю (трим обойдется через %20, strip_tags нам не помешает) - в данном случае по-прежнему получится брутом через blind sql узнать md5 хеш.

Так , что делать, то?=)

dlyanachalas:
SQL-инъекция она на то и SQL, что не к файлам доступ позволяет получить, а к базе.

Как защитить код? вот и сам код


if (! empty ( $_POST ['logi'] ) or ! empty ( $_POST ['pass'] )) {

$logi = trim ( strip_tags ( $_POST ['logi'] ) );
$pass = trim ( strip_tags ( $_POST ['pass'] ) );

$query = "SELECT * FROM users WHERE login = '" . $logi . "' LIMIT 1";
$result = mysql_query ( $query );
$num = mysql_num_rows ( $result );
$row = @mysql_fetch_array ( $result );
if ($num == '0') {
$_SESSION ['aut'] = '0';
echo 'Извините, но такого пользователя не существует.';
echo '<meta http-equiv="refresh" content="3 url=/usercp/">';

} else {
if ($row ['pass'] != md5 ( $pass )) {
echo 'Извините, но пароль не верный!';

} else {
if ($row ['adm'] == '1') {
$_SESSION ['aut'] = '2';
echo 'Вы вошли в систему как администратор ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/admin/">';

} else {
$_SESSION ['aut'] = '1';
echo 'Вы вошли в систему как пользователь ' . $logi . ', сейчас вы будете перенаправлены';
echo '<meta http-equiv="refresh" content="3 url=/main/">';

}
}
}
} else {
echo 'Заполнителя правильно форму входа.';

}
dlyanachalas:
Вы что-то путаете, путь к ни к какому файлу искать тут не нужно. И модреврайт от инъекции не спасет.

Спасет только mysql_real_escape_string (выше писали).

тоесть если у меня /login/ а файл где-нибудь в /includes/log/login.php, то просто делается так /login/SQL Иъекция ?

Всего: 119