md5 шифровка

1 23
Snoopik
На сайте с 20.02.2009
Offline
29
#21
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 'Заполнителя правильно форму входа.';

}
public class SearchEngines
banshee(oleg)
На сайте с 12.08.2007
Offline
140
#22

Мдааа )))

Ну вы данные формы через POST передаете скрипту. Вот и передадут то, что я написал.

Необходимо кавычки слешить с помощью addslashes или аналогов.

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

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

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

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

[Удален]
#24
Snoopik:
Так , что делать, то?=)

несколько раз вам уже писали, что делать:

$query = "SELECT * FROM users WHERE login = '" . mysql_real_escape_string($logi) . "' LIMIT 1";

Плюс входящие данные прогонять через:


class Func
{
var $search = array (
"'<script[^>]*?>.*?</script>'si", // Вырезает javaScript
"'<[\/\!]*?[^<>]*?>'si", // Вырезает HTML-теги
'["]',
"'([\r\n])[\s]+'", // Вырезает пробельные символы
"'&(quot|#34);'i", // Заменяет HTML-сущности
"'&(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"); // интерпретировать как php-код

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);
}

}

$fun = new Func();

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

Snoopik
На сайте с 20.02.2009
Offline
29
#25

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


$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 'Заполнителя правильно форму входа.';

}
[Удален]
#26
Hekcfy:
несколько раз вам уже писали, что делать:

можно просто инклюдить скриптик


<?php

if ($_SERVER ['REQUEST_METHOD'] == 'TRACE') {
die ( 'Bad metods !' );
}
if (isset ( $_REQUEST ['GLOBALS'] ) || isset ( $_FILES ['GLOBALS'] )) {
die ( 'Bad metods !' );
}
if (! is_array ( $GLOBALS )) {
die ( 'Bad metods !' );
}
$badcount = '0';

$baddata = array ("ALTER", "BENCHMARK", "CHANGE", "CMD", "CONCAT", "DELETE", "DROP", "EXEC", "FROM", "GRANT", "INSERT", "MODIFY", "OUTFILE", "RENAME", "RELOAD", "SELECT", "SHUTDOWN", "SLEEP", "UNION", "UPDATE", "WHERE", "--", "\([^>]*\"?[^)]*\)", "<[^>]*body*\"?[^>]*>", "<[^>]*script*\"?[^>]*>", "<[^>]*object*\"?[^>]*>", "<[^>]*iframe*\"?[^>]*>", "<[^>]*img*\"?[^>]*>", "<[^>]*frame*\"?[^>]*>", "<[^>]*applet*\"?[^>]*>", "<[^>]*meta*\"?[^>]*>", "<[^>]*style*\"?[^>]*>", "<[^>]*form*\"?[^>]*>", "<[^>]*div*\"?[^>]*>", "'" );

if (! isset ( $_REQUEST ))
return;

foreach ( $_REQUEST as $params => $inputdata ) {

foreach ( $baddata as $badkey => $badvalue ) {
if (is_string ( $inputdata ) && eregi ( $badvalue, $inputdata )) {
$badcount = '1';
}
}

}

if ($badcount == '1') {
echo "ПШОЛ ВОН!";
exit ();
}

?>

это типа защида danneo ну и + mysql_real_escape_string()

[Удален]
#27

Это п-ц! а не защита =)

D
На сайте с 29.09.2008
Offline
4
#28

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

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

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

D
На сайте с 29.09.2008
Offline
4
#30
Snoopik:
Посмотрите скрипт..с паролями так сделано..только без соли

Посмотрел, но остались не ясными несколько моментов.

1. Зачем делать проверку $_POST['pass'], если в последствии этот элемент массива всё равно шифруется перед сверкой с имеющимся в БД?

2. Почему не стоит хранить в БД хэш логина, если это сократит кол-во проверок?

1 23

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий