|
|
|
|
|
для: kasmanaft
(09.09.2006 в 20:41)
| | Проверяй как тебе посоветовали в последнем варианте если количество строк больше 0 то создавай переменную сеанса. | |
|
|
|
|
|
|
|
для: Hatred
(09.09.2006 в 19:41)
| | Исправления это то что закомментировано?
Если раскомментировать, должно работать .. потому как
Возвращает ассоциативный массив с названиями индексов,
соответсвующими названиям колонок или FALSE если рядов больше нет.
|
то есть, если рядов нет, $totalRes примет значение false
аналогично можно сделать
if (mysql_num_rows($result) > 0)
|
| |
|
|
|
|
|
|
| Приведённый ниже код страницы авторизации с очень незначительными изменениями работает некорректно, а именно: при вводе любого логина можно даже не указывать пароль, авторизация пройдёт успешно. Может быть, я где-то ошибся в коде, но мне кажется, что проблема здесь:
$result=mysql_query($query,$db_connect);
if($result)
{
$HTTP_SESSION_VARS['valid_user']=$userid;
}
|
То есть проверяется, произошло ли соединение с БД или нет, а не то, вернул ли запрос что-тот или нет. Даже в случае, если логин или пароль будут указаны и будут возвращены пустые значения, $result не будет принимать значение false, так как возврящает названия полей таблицы auth, пусть даже с пустыми значениями.
Полный код:
<?
$dblocation="localhost";
$dbname="auth";
$dbuser="root";
$dbpassword="";
session_start();
if(isset($HTTP_POST_VARS['userid'])&&
isset($HTTP_POST_VARS['password']))
{
$userid=$HTTP_POST_VARS['userid'];
$password=$HTTP_POST_VARS['password'];
$db_connect=mysql_connect($dblocation,$dbuser,$dbpassword);
mysql_select_db($dbname,$db_connect);
$query="SELECT*FROM $dbname WHERE name='$userid' AND pass='$password'";
$result=mysql_query($query,$db_connect);
//$totalRes=mysql_fetch_assoc($result); Для корректной работы скрипта авторизации
if($result) //Значение $result нужно заменить на $totalRes
{
$HTTP_SESSION_VARS['valid_user']=$userid;
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Страница регистрации</title>
</head>
<body>
<h2 align="center">Страница регистрации</h2>
<?
if(isset($HTTP_SESSION_VARS['valid_user']))
{
echo ("Вы зарегистрированы как ". $HTTP_SESSION_VARS['valid_user']." <br />");
echo "<a href='destroy.php'>Выход</a><br />";
}
else
{
if(isset($userid))
{
echo("Регистрация невозможна");
}
?>
<form method="post" action="auth.php">
<table>
<tr>
<td>Имя:</td>
<td><input type="text" name="userid" size="16"></td>
</tr>
<tr>
<td>Пароль:</td>
<td><input type="password" name="password" size="16"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Зарегистрировать"></td>
</tr>
</table>
</form>
<?
}
?>
<br>
<a href="members_only.php">Только для зарегистрированных пользователей</a>
</body>
</html>
|
Если я не ошибся, то мои исправления корректны и не являются потенциальной уязвимостью? | |
|
|
|
|