Re: PHP код для небольшой админки. Ошибка.
А где этот журнал обычно находиться?
Если есть панель управления сайтом, то там должен быть доступ к журналам.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форум PHP-MyAdmin.RU → Курилка → PHP код для небольшой админки. Ошибка.
А где этот журнал обычно находиться?
Если есть панель управления сайтом, то там должен быть доступ к журналам.
А не посоветуете, аутентификацию как делать? Нашел пару примеров http://www.php.ru/manual/ru/features.http-auth.html, но тут что-то про апач написано, и http://deathcoder.ru/index.php?articles=view&id=51 Мне бы надо такой код, чтоб он на любом сервере работал. (а то опять будет такая же фигня, как и с отправкой почты). Насколько я понял, оба этих примера защищают только 1 страницу?
Мне бы надо такой код, чтоб он на любом сервере работал.
Оба варианта должны вас устроить.
Насколько я понял, оба этих примера защищают только 1 страницу?
Они защищают все файлы в которых подключены.
Блин. Кучу примеров посмотрел. Они либо только для апача, либо я не понимаю, что там написано.
Вот подобрал боле-менее понятный пример:
index.php
<?php
session_start();
if (isset($_COOKIE['adm_log']) && isset ($_COOKIE['adm_pass'])) {
if (($_COOKIE['adm_log']=="a") && ($_COOKIE['adm_pass']=="a")) {
echo "Привет, админ!";
}
} else {
echo 'Привет, гость! Залогинься - <a href="login.php">тут</a>';
}
?>
login.php
<?php session_start(); ?>
<html>
<form action="login.php" method="post">
Ваше имя: <input type="text" name="login"><br>
Ваш пароль: <input type="password" name="pass"><br>
<input type="submit" name="go" value="Enter!">
</form>
</html>
<?php
if ($_POST['go']){
if (($_POST['login']=="q") &&($_POST['pass']=="q")){
setcookie("adm_log",$_POST['login'],time()+3600,"/");
setcookie("adm_pass",$_POST['pass'],time()+3600,"/");
header("Location: index.php");
}
}
?>
При вводе неверного логина или пароля ничего не происходит (как и должно быть). При вводе верного логина и пароля появляется вот что:
Warning: Cannot modify header information - headers already sent by (output started at C:\Serv\xampp\htdocs\mysite\auth\login.php:9) in C:\Serv\xampp\htdocs\mysite\auth\login.php on line 12
Warning: Cannot modify header information - headers already sent by (output started at C:\Serv\xampp\htdocs\mysite\auth\login.php:9) in C:\Serv\xampp\htdocs\mysite\auth\login.php on line 13
Warning: Cannot modify header information - headers already sent by (output started at C:\Serv\xampp\htdocs\mysite\auth\login.php:9) in C:\Serv\xampp\htdocs\mysite\auth\login.php on line 14
headers already sent
Функция setcookie() должна выполняться до вывода HTML кода.
Все. Заработало.
Вот, допустим, есть у меня кроме этих страниц index и login еще страница main. Как сделать, чтоб при попытке зайти на страницу main не авторизовавшись, открывалась бы страница для ввода логина и пароля?
Переписывать этот код:
<?php
session_start();
if (isset($_COOKIE['adm_log']) && isset ($_COOKIE['adm_pass'])) {
if (($_COOKIE['adm_log']=="a") && ($_COOKIE['adm_pass']=="a")) {
echo "Привет, админ!";// Если впихивать этот код на каждую страницу, то придется вместо этой строки писать весь остальной код.
}
} else {
echo 'Привет, гость! Залогинься - <a href="login.php">тут</a>';
}
?>
нет желания. Может есть другой способ?
чтоб при попытке зайти на страницу main не авторизовавшись, открывалась бы страница для ввода логина и пароля
Если проверку не проходит, то перенаправляйте строкой:
header("Location: login.php");
Т.е. этот код все равно надо писать?
session_start();
if (isset($_COOKIE['adm_log']) && isset ($_COOKIE['adm_pass'])) {
if (($_COOKIE['adm_log']=="a") && ($_COOKIE['adm_pass']=="a")) {
Тут код страницы;
}
} else {
header("Location: login.php");
}
Типа такого?
Типа такого?
Можно так. Вы хоть пробуйте, я же не отладчик, для этого инструменты есть.
Сейчас нет возможности проверить. У меня сервер на ноуте, а я обычно, пишу код, подключаясь с компа к ноуту. А щас с подключением проблемы
Так-то это работать должно, но у меня в коде кроме php еще и много html. А переписывать html в echo '<тут html код>' немного лениво.
Вот допустим, у меня такая структура:
<?php
?>
<html>
</html>
<?php
?>
...
<?php
?>
В самом начале я написал
session_start();
if (isset($_COOKIE['adm_log']) && isset ($_COOKIE['adm_pass'])) {
if (($_COOKIE['adm_log']=="a") && ($_COOKIE['adm_pass']=="a")) {
Тут код страницы;
А
}
} else {
header("Location: login.php");
}
Где писать? По идее это должно быть в конце кода, но у меня там html и код как бы разрывается...
Где писать?
Пусть разрывается. Если так не нравится, то попробуйте как-нибудь иначе придумать.
О. Вроде бы все написал И даже все работает
Осталось только всякие мелочи исправить, чтоб удобнее было пользоваться админкой.
Спс вам огромное
Здравствуйте. Маленькая проблемка.
<?php session_start();
//Коннектися к бд
$hostname = "localhost";
$username = "myusername";
$password = "mypassword";
mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
mysql_query('SET NAMES cp1251');
/* выбрать базу данных. Если произойдет ошибка - вывести ее */
mysql_select_db(baza) or die(mysql_error());
$login = 'admin';
$query = "SELECT `password` FROM `users` WHERE `login` = '$login'";
$result = mysql_query($query);
$row = mysql_fetch_assoc($result);
$password = $row['password']; //Выбираем password ил БД
mysql_close();
//Вводим случайные переменные и находим их сумму
$a=rand(1,20);
$b=rand(1,20);
$sum=$a+$b;
//Если пароль, логин и сумма цифр совапил, то отправляем логин и пароль в кукисы и переходим на главную страницу
if (($_POST['login']=="admin") &&($_POST['pass']==$password) &&($_POST['sum']==$sum)){
setcookie("adm_log",$_POST['login'],time()+3600,"/");
setcookie("adm_pass",$_POST['pass'],time()+3600,"/");
header("Location: index.php");
}
?>
<html>
//Создаем форму
<form action="login.php" method="post">
Ваше имя: <input type="text" name="login"><br>
Ваш пароль: <input type="password" name="pass"><br>
Введите сумму чисел: <?php echo "<b>"; echo $a; echo "+"; echo $b; echo"</b>";?>
<input type="text" name="sum"><br>
<input type="submit" name="go" value="Enter!">
</form>
</html>
Почему-то, даже если ввожу все правильно, то не могу пройти проверку Если удалить проверку суммы чисел и все, что с ними связано, то все нормально...
Если удалить проверку суммы чисел и все, что с ними связано, то все нормально
Я не понял зачем вы эту проверку сделали, учитывая, что работать она никак не может, ведь при каждом запуске скрипта значения функции rand() будут разные.
Ну, это вместо капчи. Что б брутфорсом было труднее взломать
Ну, это вместо капчи. Что б брутфорсом было труднее взломать
Это лишнее. Авторизация делается обычно несколько иным образом, через необращаемую кодировку пароля функцией хеширования.
В БД пишем не сам пароль, а его хеш. MD5 хеш - это строка из 32 символов, которая генерируется из любой строки.
$password = md5('пароль');
При сверке паролей, необходимо сравнивать их хеш, то есть хеш из БД и хеш из полученной строки пароля.
if ( $_POST['login'] == "admin" && md5($_POST['pass']) == $password ) {
В кукисы тоже отправляем хеш, а не читаемый пароль.
А от подбора пароля методом перебора есть только один действенный способ блокировки - это таймер на авторизацию. При таймере в 10 секунд, в течении которых пользователю с одного IP нельзя авторизоваться снова, метод перебора не работает абсолютно никак, потому что продлится тысячи лет. Так что лучше продумайте такой механизм защиты для своей авторизации.
А в чем смысл этого хэша? Это что-то типа кодирования? Какая разница. что будет - пароль или хеш? У меня только 1 учетная запись. Я с таким же успехом могу создать 32-значный пароль.
А в чем смысл этого хэша?
Перехват хеша не означает перехвата пароля. При одной учетной записи, это, конечно, не столь существенно.
Форум PHP-MyAdmin.RU → Курилка → PHP код для небольшой админки. Ошибка.
Форум работает на PunBB, при поддержке Informer Technologies, Inc
Currently installed 7 official extensions. Copyright © 2003–2009 PunBB.