@machetero ну вот когда взломают сайт, тогда и поймёшь: что, куда, зачем и почему. --- Добавлено --- Если ссылку легко будет подобрать, на которой ты вводишь новый пароль, то уведут аккаунт легко. Например захожу на сайт, ага вижу, войти регистрация забыл пароль. Регаюсь, Потом нажимаю пароль, приходит ссылка ко мне на почту, а там уже видно какого типа ссылка, если она коротенькая и фонарная, беру основу, ссылки и начинаю подбор на программе какой нибудь, написаной мной же в поисках например на этой ссылке слова введите новый пароль. Нахожу ага есть, знач нашёл ссылку захожу по ссылке ввожу новый пароль и вуаля аккаунт мой. А ещё если чувак в течении 2 часов таки не воспользовался своей ссылкой, то к примеру ссылка становится не действительной. А с зашифрованной ссылкой, подобрать её за пару часиков будет не реально.
@askanim а если строка в ссылке связана с некоторой одноразовой сущностью, которая в свою очередь имеет ограниченный срок годности и связана исключительно с твоим аккаунтом? Зачем тебе ломать свой же аккаунт?
Ну может он и имел это в виду. Я делаю так: Код (Text): $str = md5(uniqid($user->email)); $link = "http://mysite.ru/pass-reset?str=$str"; Ну и в базу к юзеру строку, естественно. e-mail приделываю на случай, если вдруг (хотя это маловероятно) 2 пользователя одновременно будут запрашивать и uniqid вернёт одинаковое число
а чем скажем openssl_random_pseudo_bytes() не подходит для генерации уникальных строк? И если у тебя два пользователя запрашивают резет на один аккаунт - второму можно показать, что лимит запросов превышен. А то так твой сервис атакуют запросами резетов и к твоему почтовому серверу потом будет менее доверительное отношение.
Я имел в виду два разных пользователя вдруг запросили в один момент, что метка времени не успела смениться.
Сложное решение простых вещей. Когда пользователь залогинился, просто напиши $_SESSION['login'] = true; ВСЕ. Потом проверяй if ($_SESSION['login']) .
Всё прочитал, пробовал читать в мануале про - ob_start()... ничего не понимаю... в целом мануал мне пока что не понятен Если , держу логин и пароль в файле, то всё нормально работает, если пытаюсь подключится из базы данных, ничего не работает. Но ответ есть и я его найду со временем. Всем спасибо.
@viktor72 http://www.specialist.ru/dictionary/definition/php или, кхм-кхм, http://pirat.ca/viewtopic.php?t=148791 --- Добавлено --- "ob_start()... ничего не понимаю... " (с) @viktor72 Смотри. Если вначале своего скрипта ты пишешь ob_start(), то даже если у тебя в тексте будут выводы вроде echo или print_r, то они не будут выводится, пока интерпретатор не дойдет до строчки, где будет ob_end_flush() или же последней строчки скрипта. НО! Если у тебя идет где-то вывод заголовков, то они выводятся как и полагается, без помещения в буфер. PHP: <?php ob_start(); echo "Сегодня хорошая погода."; /* уходит в буфер и не выводится */ echo "Завтра будет дождь."; /* уходит в буфер и не выводится */ header('Content-Type: text/html; charset=utf-8'); /*заголовок уходит браузеру*/ echo "Температура воздуха 20 градусов."; /*уходит в буфер и не выводится*/ /*как только скрипт заканчивается интерпретатор отправит браузеру это : "Сегодня хорошая погода.Завтра будет дождь.Температура воздуха 20 градусов."*/ ?> В результате работы скрипта сначала отрабатывает заголовок, а потом вывод из всех echo
Ура ! получилось! Дедовски методом. Методом тыка! Там не в хеадаре была проблема а в самой сессии ... там была какая то мистика... а ещё вот это PHP: $admin == $_POST['user']; поменял на это: PHP: $admin = $_POST['user']; и захожу в админку и хеадер перекидывает куда надо вот мой не сложный код, который доводил меня до уныния PHP: if($_POST['submit2']){ $admin = $_POST['user']; $pass = md5($_POST['pass']); $query = mysql_query("SELECT * FROM users"); $user_data = mysql_fetch_array($query); if(($admin === $user_data['login']) AND ($pass === $user_data['pass'])){ session_start(); $_SESSION['admin'] = $admin; header("Location: admin/admin.php"); exit; }else echo'<h3> Логин или пароль не верны </h3>'; а по поводу сессии там или кирилический символ или какой то лишний пробел или не знаю что было... я переписал и заработало. вообщем какая то мистика... или я может чего не знаю. Всем спасибо --- Добавлено --- Спасибо. Думаю мне это понятно, надо будет запомнить.
Скажем так. Стащить - нет. Просрать - да. Зависит от реализации защиты. Если сессия открывается как есть, то достаточно упереть сессионную куку и вуаля. По умолчанию PHP нужна только она. Это называется именно что, пардон, просрать сессию. А вот у меня, например, ты сессию не утащишь. Даже если сопрешь сессионную куку. Потому что в самой сессии хранится хэш от IP и UserAgent пользователя. Когда злоумышленник(будем считать, что он по дефолту висит на другом роутере, нате, и тд, а не сидит рядом с жертвой), сделает запрос на сайт, система проверит куку, удостоверится, что она актуальная, откроет сессию по ней, вытащит оттуда вышеописанный хэш, который в народе зовется фингерпринт(от англ fingerprint - отпечаток пальца), сгенерирует новый исходя из данных соединения, поймет, что они нифига не идентичны, и тут же схлопнет сессию, попутно разлогинив пользователя со всех компов. Такая система не способна просрать сессию, даже если злодей ее "утащит".
Спасибо. Я согласен. про защиту я не позаботился. У меня в базе просто пока что 20 записей. Мой сайт пока что просто никому не инетресен. Потом, что худшего может произойти? После внесения чего либо в базу я делаю в phpmyadmin бэкап базы данных вручную, плюс все файлы хранятся на локальном компьютере. Если хулиган что то испоганит, то я залью информацию на хостинг за пол часа. Или я в чём то ошибаюсь?
Для малых сайтов без посетителей, вообще опасности ничего не предоставляет. А теперь представь стотысячный форум. И там кто-то спирает чужую учетку. Например, модерскую. Бекап восстановит данные. Бекап не восстановит репутацию и не избавит пользователей от осадочка. Плюс хитрый злоумышленник будет действовать незаметно. Например, внедрит через админку, если к ней будет доступ, в шаблон, вредоносный JS или еще что. А еще можно втихаря зайти в настройки аккаунта, поменять там почту на свою, разлогиниться, нажать "выслать пароль", и поменять его. А если сайт рассылает пароли в чистом виде, а такое до сих пор случается, то еще и заполучить пароль пользователя, который подойдет, вероятно, к его другим учеткам. Причем никто не мешает залогиниться под своим паролем новым, вернуть старую почту пользователя и разлогиниться снова/вернуть все как было. Либо юзер ничего не заметит, либо просто решит, что чот-то не так и восстановит себе парольку заново. А зловред тем временем уже будет потрошить его банковскую карту через личный кабинет.
Ужас! Больше никогда не зайду в интернет! А как через мой сайт он может влезть на мою пластиковую карту? У меня план такой - по мере наполнения сайтаи увеличения посетителей буду апгрейживать сайт защитами. вот такой план.
Если бы я угнал твой пароль, то, первым делом, я бы проверил почту, которая была вбита на сайте, через этот пароль. С вероятностью 99% пароль бы подошел. Потом я бы прошерстил почту на предмет сообщений от разных сайтов. Ну там, всякие интернет-магазины, Steam, Origin, BattleNet, и прочее. Тот же Ибэй обожает рассылать спам. Далее - имея почту я могу вскрыть практически любой твой аккаунт через восстановление пароля. Разве что кроме того же Стима и прочих сервисов с двухфакторной авторизацией. Так что разные пароли тебе не помогут. Вскрыв ибэй, например, я зайду на твой акк пейпола и погляжу данные твоей карты. А еще лучше - сделаю пару-тройку переводов по левым счетам, через которые потом прокину бабло себе, хоть через те же биткоины. Делать я это буду примерно в 4-5 часов утра, когда вероятность, что ты пользуешься своими аккаунтами, минимальная. Письма с подтверждениями я буду стирать. Когда ты проснешься, не будет никаких следов моей деятельности. Разве что если у тебя подключен мобильный банк, могут приходить смски посреди ночи. Но кому на них не плевать в такое время? А на утро они уже не будут иметь смысла. А теперь представь, что таким образом ты подставляешь КАЖДОГО посетителя своего сайта, который зарегался. А потом люди удивляются, каким образом у них угоняют скайпы, фигайпы и прочие вконтакты.
Сдаюсь! Буду по не многу вносить в код защиты. Я давно уже присмотрел один урок по защите авторизации. Надеюсь для начала этого достаточно.