Jump to content
  • 0

Проблема с перенаправлением на другую страницу


bgraf
 Share

Question

Добрый день

Вот решил сделать на сайте вход для посетителей

Сделал базу данных

Форму для ввода пароля и форму для регистрации

И вот прочитал про header и вот что у меня получается

if($_POST['do'])

{

//Проверяем данные

$login = $_POST['login'];

$upass = $_POST['password'];

if($login !='' AND $upass !='')

{

//Создаем запрос

$q1=mysql_query("SELECT * FROM users WHERE nick='".$login."' AND password='".md5($upass)."' AND status=1");

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

@header("Location: eden/mazagot/mazagot.php");

вот тут меня должно как я понял перенапрвить на страницу mazagot.php а ничего не происходит , при том при всем что все проверки прошли и действительно есть такой клиент

Что не так помогите

Link to comment
Share on other sites

Recommended Posts

  • 0
смотрите мой предыдущий пост, там описано как это сделать

И еще, что помешает посетителю набрать http://www.matty.co.il/eden/mazagot/mazagot.php и обойти всю вашу авторизацию?

Вы имеете ввиду на странице формы ввода сделать что то типо

<tr>

<td>

<?php if(!empty($error))

{

echo $error ;

}

?>

</td>

</tr>

а на странице проверок типо этого

if(mysql_num_rows($q1)===1)

{

//Если есть, то создаем сессии и перенаправляем на эту страницу

$r=mysql_fetch_array($q1);

$_SESSION['user'] = $r['nick'];

$_SESSION['password'] = $r['password'];

$_SESSION['SID'] = md5(crypt($r['nick'],$r['password']));

header("Location: http://www.matty.co.il/eden/mazagot/mazagot.php");

}

else

{

$error = ("имя или порольвведены не верно <br>");

exit;

}

смотрите мой предыдущий пост, там описано как это сделать

И еще, что помешает посетителю набрать http://www.matty.co.il/eden/mazagot/mazagot.php и обойти всю вашу авторизацию?

помешает что то типо вот такого

if(!isset($name))

{

и тут обратно на авторизацию

}

Link to comment
Share on other sites

  • 0
смотрите мой предыдущий пост, там описано как это сделать

И еще, что помешает посетителю набрать http://www.matty.co.il/eden/mazagot/mazagot.php и обойти всю вашу авторизацию?

ну еще я надеюсь можно как то проверить плюс к тому что в сессии будет указано имя пользователя еще и то с какой страницы он пришел

еще не знаю правда как но скорее всего что то есть для того как это проверить ну максимум вас дорогие помучаю

Спасибо всем огромное преогромное

Link to comment
Share on other sites

  • 0

Все еще используете ?> в конце файла, значит эту ошибку вам еще не раз исправлять.

И вот это вот

nick='".$login."'

это ерунда.

Читайте тут http://ru.php.net/mysql_real_escape_string, есть даже пример как вас хакнут и, конечно, пример как нужно делать.

Link to comment
Share on other sites

  • 0
Все еще используете ?> в конце файла, значит эту ошибку вам еще не раз исправлять.

И вот это вот

nick='".$login."'

это ерунда.

Читайте тут http://ru.php.net/mysql_real_escape_string, есть даже пример как вас хакнут и, конечно, пример как нужно делать.

не уже стер :D

спасибо

Link to comment
Share on other sites

  • 0

А можно я предложу другое решение?

http://ru2.php.net/manual/en/function.ob-start.php

вот это. И тогда отправляйте заголовки в каком угодно месте скрипта.

И, кстати, вот тут

//Проверяем существует ли хоть одна запись

if(mysql_num_rows($q1)===1)

комментарий неверный. Это проверка на существование ровно одной записи (и ни одной больше). Заблуждаете сами себя :D

Тогда уж так: if (mysql_num_rows($q1)). Будет действительно проверка на наличие результата и на то, что он отличается от нуля.

Edited by Int
Link to comment
Share on other sites

  • 0

Похоже у вас включены register_globals, отключите - это серьезная брешь в безопасности. Проверку if(!isset($name)) при включенном register_globals легко обойти, задав в гете имя пользователя так: www.matty.co.il/eden/mazagot/mazagot.php?name=<имя пользователя>

Если register_globals отключено и name задается в сессии - другое дело.

Если mazagot.php нет проверки пароля - тоже потенциально слабое место. Надо проверять пароль и в этом скрипте. Так зачем промежуточная проверка пароля и логина? Проверяйте все сразу в mazagot.php и либо перенаправляйте на повторный ввод, либо выводите страницу.

И никто не говорил, что там, где header() никакого вывода не должно быть. Вывода в скрипте не должно быть до header, а после можно все что нужно уже выводить. Я же именно так все объяснял. Header - это не перенаправление, а передача первичной информации броузеру, перенаправление осуществляет уже броузер на основании переданной вами информации.

Edited by Searcher
Link to comment
Share on other sites

  • 0
А можно я предложу другое решение?

http://ru2.php.net/manual/en/function.ob-start.php

вот это. И тогда отправляйте заголовки в каком угодно месте скрипта.

И, кстати, вот тут комментарий неверный. Это проверка на существование ровно одной записи (и ни одной больше). Заблуждаете сами себя :D

Тогда уж так: if (mysql_num_rows($q1)). Будет действительно проверка на наличие результата и на то, что он отличается от нуля.

на самом деле я видел эту функцию но мне обьяснили что это типо лечить зубы нафтагеном , почему не знаю но решил не рисковать

Похоже у вас включены register_globals, отключите - это серьезная брешь в безопасности. Проверку if(!isset($name)) при включенном register_globals легко обойти, задав в гете имя пользователя так: www.matty.co.il/eden/mazagot/mazagot.php?name=<имя пользователя>

Если register_globals отключено и name задается в сессии - другое дело.

Если mazagot.php нет проверки пароля - тоже потенциально слабое место. Надо проверять пароль и в этом скрипте. Так зачем промежуточная проверка пароля и логина? Проверяйте все сразу в mazagot.php и либо перенаправляйте на повторный ввод, либо выводите страницу.

И никто не говорил, что там, где header() никакого вывода не должно быть. Вывода в скрипте не должно быть до header, а после можно все что нужно уже выводить. Я же именно так все объяснял. Header - это не перенаправление, а передача первичной информации броузеру, перенаправление осуществляет уже броузер на основании переданной вами информации.

дело в том что имя я задаю в сессии

$r=mysql_fetch_array($q1);

$_SESSION['name'] = $r['name'];

идея была не дать не зарегистрированному пользователю скачать файлы с mazagot.php но дать всем доступ на эту страницу дабы посмотреть какие курсы есть . и в случае если человек вошел как зарегистрированный то он может скачать файлы а если нет то при попытки скачать он будет перенаправлен на страницу для ввода имя и пороля

и поэтому на этой странице я делаю вот такую штуку

<?php

if($_SESSION['name'])

{

echo'<a href="/eden/mazagot/ארגונומיה בעבודות בנייה.ppt"><img src="/eden/mazagot/button_download.jpg" width="100" height="25" /></a>';

}

else

{

echo'<a href="../../auth.php"><img src="/eden/mazagot/button_download.jpg" width="100" height="25" /></a>';

}

?>

Link to comment
Share on other sites

  • 0

скажите еще , везде пишут про то что при применении сессии злоумышленник может подсмотреть что то в адресной строке потом скопировать подделать и так далее вот я использую сессии и при переходе со странице на страницу я не вижу в адрессной стороке ничего кроме юрл страницы

почему

Link to comment
Share on other sites

  • 0
на самом деле я видел эту функцию но мне обьяснили что это типо лечить зубы нафтагеном , почему не знаю но решил не рисковать

В чем тут риск?! Прописываешь старт функции сразу после старта сессии, а затем в конце скрипта - и все. Две строки - убудет что ли?! :D

На первый момент, когда еще не умеешь грамотно соединять html и php - можно обойтись данной функцией.

Link to comment
Share on other sites

  • 0
В чем тут риск?! Прописываешь старт функции сразу после старта сессии, а затем в конце скрипта - и все. Две строки - убудет что ли?! :D

На первый момент, когда еще не умеешь грамотно соединять html и php - можно обойтись данной функцией.

скорее всего вы правы

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy