Отключение кнопок вперед и назад + php - PullRequest
1 голос
/ 28 января 2010

Я почти закончил (ну, я думал, что я закончил), написание этой страницы входа в php. Все отлично работает, когда пользователь вводит данные и нажимает кнопку входа.

Но после входа в систему пользователь может использовать кнопки «вперед» и «назад» в браузере для перехода между двумя страницами.

Есть ли способ остановить это? В основном, когда они находятся на странице входа, они не могут пересылать на следующую страницу.

(1-я страница, страница входа.)

<form method="post" action="selectQuery.php">
<table width="768" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="118" height="34">Name:</td>
    <td width="650"><select name="username"  id="username">
     <option value="fredk">Fred</option>
      <option value="arbonk">Arbon</option>
      <option value="arsalana">Arsalan</option>
      <option value="minhn">Minh</option>
      <option value="nathanielg">Nathaniel</option>
    </select></td>
  </tr>
  <tr>
    <td height="33">Password:</td>
    <td><input name="password" type="password" value="password" maxlength="16" /></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="submit" value="Login" /></td>
  </tr>
</table>
</form>

(2-я страница)

<?php
$username = $_POST['username'];
$password = $_POST['password'];
$referer = $_SERVER['HTTP_REFERER'];

#connection to server
$connection = @mysql_connect ( "***.***.**.*" , "****", "*******") or die ("Could not connect to server");

#connection to database
$rs = @mysql_select_db ( "one", $connection ) or die ("Could not connect to Database");

#the sql query
$sql = "SELECT * FROM `users` WHERE user_name = \"$username\" AND password = \"$password\"";

#executing the query
$results = mysql_query( $sql, $connection ) or die ("Could not connect to Database");

#counts the no of rows that much the query
$row = mysql_num_rows($results);
##$rows = count(row);

#checks to see if password field is left blank
#if so it will return the user back to the login page
#if there is a match then we assume that the login is authenticated


if (empty($password) || $row == 0)
 {
  header( "Location:$referer" ); exit();
 }

else 
{

 if ($username == 'fredk')
 { $fname = 'Fred'; }
 else if ($username == 'arbonk')
 { $fname = 'Arbon'; }
 else if ($username == 'arsalana')
 { $fname = 'Arsalan'; }
 else if ($username == 'minhn')
 { $fname = 'Minh'; }
 else if ($username == 'nathanielg')
 { $fname = 'Nathaniel'; }

 $msg = "Hi $fname, your login was successfull. <p></p>";

 echo($msg);

}

?>

Код на странице 2 должен проверять правильность входа в систему, если все в порядке, у меня есть дополнительный код (форма и другой запрос к базе данных), который становится видимым для пользователя.

Ответы [ 5 ]

3 голосов
/ 28 января 2010

Всегда перенаправлять со страницы входа на первую страницу, если пользователь вошел в систему, и перенаправить на страницу входа, если пользователь не вошел.

Другая страница

if (! $ _ SESSION ['user']) {

header ("Location: $ login");

}

2 голосов
/ 28 января 2010

Я просто добавлю несколько вопиющих проблем вашего сценария входа в систему.

  • Что произойдет, если мой пароль будет 1" OR 1=1
  • Что если мой браузер не отправляет реферала?
  • @ не очень хороший способ подавления ошибок.

Я думаю, что для вашей проблемы вы должны исследовать PHP сессии.

Я думаю, что вместо отключения кнопок «назад» и «вперед», вы должны работать с ими. Люди ожидают, что они будут работать правильно.

1 голос
/ 28 января 2010

То, что я использовал, чтобы обмануть браузер - никогда не менять URL-адрес, на который он смотрит. POST на отдельной странице, которая устанавливает переменные сеанса, а затем перенаправляет обратно на начальную страницу, которая использует переменные сеанса, такие как большой конечный автомат .

0 голосов
/ 28 января 2010

На второй странице, после проверки логина, вы должны перенаправить на другую страницу, например, страница wellcome, которая не позволит кнопке «назад / вперед» попасть на страницу проверки. Также на странице входа в систему вы можете проверить, вошел ли пользователь в систему, и в этом случае вы перенаправляете на страницу wellcome.

Кроме того, если пользователь уже вошел в систему, то в чем проблема того, что он / она может получить доступ к страницам, которые он / она уже посетил, с помощью кнопки «Вперед»?

0 голосов
/ 28 января 2010

Они могут перейти на «защищенную» страницу, но не могут там ничего сделать ... Так как при следующей загрузке страница перенаправит их в форму входа. :)

...