Здравствуйте. Я сделал на сайте вот такую регистрацию+авторизацию http://htmlweb.ru/php/example/avtorizacija2.php Вопрос: безопасен ли такой метод???
вот сразу обиделся за строки: Код (Text): # Убераем лишние пробелы и делаем двойное шифрование $password = md5(md5(trim($_POST['password']))); если я ввел 123пробелпробел то оно запишется как 123 и тогда еще и 123пробел будет работать. простой пример как из моего одного (пусть и не надежного) пароля система сделала еще менее надежный с большим кол-вом вариантов, на которые он будет срабатывать как валидный. оставьте мне то что я ввел. если я забыл и ввел 123пробел - скажите что пароль неверный и я буду сидеть вспоминать сколько пробелов я ткнул в конце. остальное не читал - уж больно по глазам дизайн бьет.
Как может совпасть 123пробелпробел с 123 ? Это же разные вещи Добавлено спустя 1 минуту 23 секунды: Ganzal я делаю как там заношу командой mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$password."'"); но почему-то в базу вместо логина заносится цифра 0, подскажи почему так происходит Добавлено спустя 1 минуту 33 секунды: И на денвере когда делаю так header("Location: login.php"); Он говорит так: Cannot modify header information - headers already sent by (output started at Z:\home\site.net\www\register.php:1) in Z:\home\site.net\www\register.php on line 107
а легко. функция трим без аргументов - обрезает слева и справа пробельные символы - переводы строк, табуляцию, пробелы. таким образом 123пробелпробел после трима будет 123, как и 123пробел... они все будут приведены к 123. три пароля будут работать идентично...
да ты что ты? то есть сохранил ты фактически мой 123 а потом я пришел 123пробелпробел и не вошел. почему? Я ЖЕ ПРАВИЛЬНЫЙ ПАРОЛЬ ВВОЖУ!!!
это почему это? пароль это любая последовательность, которую может запомнить пользователь, а не вы желаете сохранить)))
Как почему, например я не желаю видеть на своем сайте пароли меньше 5 и больше 30 символов, в которых присутствуют пробелы и/или буквы русского алфавита.
кстати, еще один вопрос по использованию хешей. уж больно часто с таким сталкиваюсь. ну дает мд5 32 символа. но они 16-ричные. не проще сохранить 16 байт? в два раза меньше места на одном только хеше пароля. 16 байт экономии. а у вас там еще и юзер_хэш есть. еще 16 байт можно сэкономить. итого 32 на одной только строке...
тебе какая разница какой у пользователя пароль? больше 30? ну ты ж хэшируешь пароль, тебе срать должно быть на максимальную длину. ну в рамках разумного можно ограничить 512 символами. но это скорее чтоб трафик экономить. меньше 5? ну есть случаи когда человек может запомнить только 4 символа. поэтому пинкоды на кредитках 4 цифры. пароль остается на совести пользователя. наша задача его надежно сохранить и злоумышленнику не передать.
вопрос не в стойкости а в разумности использования 32 байт или 16 например FF - два байта хекс, или один байт 255 в бинарном режиме. суть не меняется - хочешь упаковал 32 хекс в 16 бин, хочешь распаковал 16 бин в 32 хекс - сам хэш от этого не поменялся. поменялось представление его хранения. чтоб включить бинарный режим (возврат 16 байт а не 32 хекс-о-байт) достаточно добавить аргумент true вторым при вызове md5. ман в помощь.
Я это применю мне бы скрипт запустить ошибки возникли: делаю как там заношу командой mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$password."'"); но почему-то в базу вместо логина заносится цифра 0, подскажи почему так происходит И на денвере когда делаю так header("Location: login.php"); Он говорит так: Cannot modify header information - headers already sent by (output started at Z:\home\site.net\www\register.php:1) in Z:\home\site.net\www\register.php on line 107
ну в регистр первая линия уже выводит данные следовательно заголовки форсированно отправлены. в 107 линии ты пытаешься отправить заголовок что вызывает логичную ошибку. такое (слив каких-то символов) часто происходит когда юникод с меткой порядка байт идет, или пустая строка перед открывающимся пхп-тегом и так далее. гуглится и решается за пару минут. самое важное пых тебе дал - output started at Z:\home\site.net\www\register.php:1 отсюда и начинаем расследование. откуда вместо логина ноль я не знаю, прочтение в начале второго ночи косяков не выявило. но рекомендую и логин тоже экранировать. а то дыра в безопасности выходит =)
Похоже, что поле user_login в б.д. имеет числовой тип. А нужен строковый. Эта ошибка обсуждалась уже сотни раз. И здесь и, наверно, на любом форуме по php, какие только существуют. Набери в яндексе или гугле "Cannot modify header information - headers already sent by"
короче, мой вердикт - скрипт фигня полная. по крайней мере у меня к нему претензии не только как у программиста, но и как у бытового пользователя. не дай боже столкнуться с сайтом, на котором он работает Добавлено спустя 1 минуту 58 секунд: неужели можно было невнимательно скопировать определение таблицы?))) ох уж эти пэмэа-юзеры... всех бы сначала за консоль и блокнот сажать, а потом уже разрешать пользоваться гуями всякими, визивигами и идэешками....
Ganzal а какой посоветуешь тогда? Добавлено спустя 1 минуту 59 секунд: sobachnik да уж моя не внимательность даже меня сейчас удивила. Спасибо за помощь! Ganzal, за консолью я работал и не раз В процессе написания кода на Python приходится часто юзать консоль.
offtop: Код (PHP): if(0=='string') { } Как?? Оо Они же не должны быть равны, как же так... Ну ёмаё все пошел вешаться =))) На хер тут 2-ое хеширование?) Код (PHP): if(!@$_POST['not_attach_ip']){ Супер проверка =)
это да. но люди пользуются и даже зарабатывают на этом. Добавлено спустя 7 минут 3 секунды: по крайней мере там давно истребили самые очевидные ошибки.