Strict Standards: Resource ID#37 used as offset, casting to integer (37) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#39 used as offset, casting to integer (39) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401

Strict Standards: Resource ID#40 used as offset, casting to integer (40) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/fm.class.php on line 401
ТвойWeb :: Версия для печати :: Скрипт авторизации [2]
ТвойWeb » WebMaster класс » PHP/Perl » Скрипт авторизации

Страниц (3): « 1 [2] 3 »
 

11. Malcolm - 16 Сентября, 2006 - 11:49:44 - перейти к сообщению
По идее должен работать и без этой строки, но у меня не пашет почему-то, я проверял.

md5() - хэш функция, типа контрольной цифры. Идея в том, чтобы хранить не сами пароли, а их хэши. В таком случае даже если хэш у тебя утянут, то восстановить пароль по нему будет довольно сложно.
Например, если в переменной $s у тебя пароль, то
CODE:
echo md5($s)
выведет хэш этого пароля.

Предположим в $a лежит значение, введенное пользователем. Тогда достаточно сравнить md5($a) c сохраненной хэш строкой.
CODE:
if(md5($a)=='098f6bcd4621d373cade4e832627b4f6') include('users/mangust.php');


'098f6bcd4621d373cade4e832627b4f6' - хэш пароля 'test' (md5('test'Подмигивание)
12. Леголегс - 16 Сентября, 2006 - 13:00:02 - перейти к сообщению
UFO пишет:
Где "test" и "open" - пароли пользователей (и таких будет много).
Это не безопастно?
Много - это сколько? Просто если делать как я написал, то легко можно модифицировать систему и хранить пароли в файле (простом, не пхп) или базе данных. Удобнее опять же: код отдельно, данные отдельно.
Malcolm пишет:
Если на сервере отключен magic_quotes, то можно сделать с таким запросом все что угодно, вплоть до выполнения на твоем сервере моего собственного скрипта.
Ты не путаешь с перлом? Улыбка Если не писать таких глупостей как
CODE:
include($a.".php");
system($a);
и т.п. то всё будет нормально.
Malcolm пишет:
$a = $_POST['a'];
На некоторых хостингах за каким-то хреном включают register_globals, т.е. подобные строчки выполненны по умолчанию.
13. Malcolm - 16 Сентября, 2006 - 13:11:03 - перейти к сообщению
Может и путаю. Негде проверить сейчас. Администрирование IPB приучает фильтровать все подряд, лишним не будет. Улыбка

register_globals отключен у меня, теперь понятно почему не работало.
14. UFO - 17 Сентября, 2006 - 07:48:01 - перейти к сообщению
Леголегс пишет:
Много - это сколько?

См. выше, я писал. Максимум 100, но они будут появляется постепенно, а не одним разом. И то сомневаюсь, что будет 100. 100 - это теоретический предел.
Цитата:
Просто если делать как я написал, то легко можно модифицировать систему и хранить пароли в файле (простом, не пхп) или базе данных. Удобнее опять же: код отдельно, данные отдельно.

Да, но если пароли или же их хэши хранить в одном файле, то этот файл можно будет стянуть и все пароли могут оказаться в чужих руках. Не лучше ли прямо в скрипте?
15. Ray Wen - 17 Сентября, 2006 - 08:52:35 - перейти к сообщению
UFO
Не лучше, хотябы по тому что отредактировать можно будет только вручную... Для примера посмотри как сделано на ExBB хранение данных пользователей, вставляешь впереди
CODE:
<?die;?>
и пусть попробуют утянуть... Подмигивание Лучше конечно в БД держать, тогда вопрос отпадает сам собой...
16. Леголегс - 17 Сентября, 2006 - 13:10:31 - перейти к сообщению
UFO пишет:
Да, но если пароли или же их хэши хранить в одном файле, то этот файл можно будет стянуть и все пароли могут оказаться в чужих руках. Не лучше ли прямо в скрипте?
Скрипт точно так же могут утянуть.
UFO пишет:
Максимум 100, но они будут появляется постепенно, а не одним разом. И то сомневаюсь, что будет 100. 100 - это теоретический предел.
Сто - это порядком. еслиб до десяти-двадцати, то ещё не страшно в коде хранить, а так делай лучше в файле. Тем более, что это не так уж и сложно, слушай Ray Wenа
17. SviMik - 17 Сентября, 2006 - 15:22:33 - перейти к сообщению
Я думаю, авторы форума не обидятся. Када мне надо что-то хранить в файлах, я из форума стягиваю функции
CODE:
function get_file($filename) {
if ( $fp = @fopen($filename,'r') ) {
@fseek($fp,8);
$str = @fread($fp,filesize($filename)-8);
@fclose($fp);
return unserialize($str); #substr($str,8,strlen($str)) );
}
return array();
}

function save_file($filename,$arr){
$fp = fopen($filename,'w');
fwrite($fp,'<?die;?>'.serialize($arr));
fclose($fp);
}

ибо хорошо сделано. Улыбка

Пароли храним в массиве. Например так:
CODE:
$users['vasja']='123';
$users['petja']='qwerty';

Проверка:
CODE:
if(array_key_exists($_POST['login'], $users) && $_POST['pass']==$users[$_POST['login']]){
include('admin.php');
}else{die('Password incorrect');}


Сохранение списка: save_file('userslist.php',$users);
Чтение: $users=get_file('userslist.php'Подмигивание;

Всё это лишь один из возможных вариатов. Это не готовый работоспособный код а только алгоритм Улыбка
18. UFO - 04 Октября, 2006 - 10:19:01 - перейти к сообщению
Malcolm пишет:
1) Подумай, что будет, если я введу вот такой пароль:
CODE:
1=1 OR ''
??
Фильтровать примерно так:
CODE:
$a = $_POST['a'];
$a = preg_replace("/[^a-z]{10}/i","",$a);


3) В данном случае нужно задать массив с паролями и проверять в нем. Если в массиве не нашел, тогда echo "Пароль неверный";

Решил наконец таки вернутся к системе.
Первый вопрос.
CODE:
$a = preg_replace("/[^a-z]{10}/i","",$a);

Что здесь значит "i"?
Второй вопрос, как можно сделать так, чтобы если пользователь вводит в поле некоторые запрещенные символы (например, "==", "=", "-", "(", "Подмигивание", "*", "@" и т.д.), то выводится надпись "Недопустимые символы" и скрипт их не воспринимает к выполнению, игнорирует.
19. UFO - 04 Октября, 2006 - 10:21:53 - перейти к сообщению
Malcolm пишет:
По идее должен работать и без этой строки, но у меня не пашет почему-то, я проверял.

md5() - хэш функция, типа контрольной цифры. Идея в том, чтобы хранить не сами пароли, а их хэши. В таком случае даже если хэш у тебя утянут, то восстановить пароль по нему будет довольно сложно.
Например, если в переменной $s у тебя пароль, то
CODE:
echo md5($s)
выведет хэш этого пароля.

Предположим в $a лежит значение, введенное пользователем. Тогда достаточно сравнить md5($a) c сохраненной хэш строкой.
CODE:
if(md5($a)=='098f6bcd4621d373cade4e832627b4f6') include('users/mangust.php');


'098f6bcd4621d373cade4e832627b4f6' - хэш пароля 'test' (md5('test'Подмигивание)

Второй вопрос.
Если пароли хранить в хэше (неважно где - файле, массиве и т.п., но в текстовом варианте, не базе), то нужно для каждого пароля генерировать хэш вручную, записывать этот хэш в файл/массив и т.п. с допустимимы хэшами? Может ли скрипт сам сгенерировать хэш и спрятать пароль, если я однажды введу сам пароль в список паролей?
20. persei - 08 Октября, 2006 - 06:50:15 - перейти к сообщению
UFO пишет:
Если пароли хранить в хэше (неважно где - файле, массиве и т.п., но в текстовом варианте, не базе), то нужно для каждого пароля генерировать хэш вручную, записывать этот хэш в файл/массив и т.п. с допустимимы хэшами? Может ли скрипт сам сгенерировать хэш и спрятать пароль, если я однажды введу сам пароль в список паролей?


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

Форум на AlfaSpace.NET


Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.0462]     [ Gzipped ]



Notice: ob_end_flush(): failed to send buffer of ob_gzhandler (1) in /home/tvoyweb/domains/tvoyweb.ru/public_html/forums/include/page_tail.php on line 33