Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Страница белая после первой перезагрузки
Kaboom  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43210
На форуме: 4 месяца, 6 дней
Карма:




Всем привет,

Товарищи знатоки, подскажите пожалуйста, как (в нижеприведённом коде) исправить ситуацию с вынужденным двойным обновлением страницы после срабатывания защиты от бутфорса:
Когда проходит заданное время ожидания, после нажатия "Обновить страницу", открывается белая пустота. И только после второго обновления, уже форма ввода логина и пароля.

Заранее благодарен

<?php
session_start ();
$db = mysqli_connect ('localhost', 'login', 'parol');
mysqli_select_db ($db, 'Baza');

$select = @mysqli_query ($db, "SELECT log, passw, ip, ip_del_time FROM test1");
if (!$select) exit ('#110');
$row = @mysqli_fetch_row ($select);
if (!$row) exit ('#111');

if (ini_get('register_globals')) exit ('Off Reg_globals');

if (!$_SESSION['bruteforce'])
{
$_SESSION['bruteforce'] = 0;
$_SESSION['bruteforce_t'] = time ();
$_SESSION['bruteforce_ip'] = $_SERVER['REMOTE_ADDR'];
}

$_SESSION['bruteforce']++;

if ((time() - $_SESSION['bruteforce_t']) > 19 ) unset ($_SESSION['bruteforce']);

if (!empty ($row[2]))
{
if ( (time() - $row[3]) < 19 )
{
exit ("IP try after 10 minutes");
}
else
{
$select = @mysqli_query ($db, "UPDATE test1 SET ip='', ip_del_time = '' WHERE log = 'log123'");
if (!$select) exit ("#112");
unset ($_SESSION['bruteforce']);
exit ();
}
}

if ($_SESSION['bruteforce'] > 3)
{
$select = @mysqli_query ($db, "UPDATE test1 SET ip='$_SESSION[bruteforce_ip]', ip_del_time = '$_SESSION[bruteforce_t]' WHERE log ='log123'");
exit("Try after 10 minutes");
}



?>

<!DOCTYPE html PUBLIC "-//W3G//DTD XHTML 1.0 Transnational//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml-transnational.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type"content="text/html; charset=windows-1251" />
<
title>админка и защита от взлома</title>


<
body>

<
h1>Админка</h1>
<
div style="background-color:#D3D3D3; width:200px; padding:10px">
<
form method="post">
login:<br />
<
input name="log" type="text" /><br />
password:<br />
<
input name="passw" type="password" /><br /><br />
<
input type="submit" name="button" style="cursor:pointer" />
</
form>
</
div>

<?php
if ($_POST['button'])
{
if (!preg_match ("/test1\.ru/", $_SERVER['HTTP_REFERER'])) exit();

$log = $_POST['log'];
$passw = md5 ("fjfjhghgjfjffjdierjfnndbhdhdh".$_POST['passw']);

if ( ($log === $row[0]) and ($passw === $row[1]))
{
$_SESSION['auth'] = $log;
echo "Enter to admin -> <a href='admin.php' > admin </a> ";

}
else
{
return exit ('Not correct');
}

}



?>

</body>
</
html>
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3375
Пользователь №: 38635
На форуме: 2 года, 11 месяцев, 9 дней
Карма: 170




1
включить вывод ошибок
error_reporting(-1);
ini_set('display_errors', 1);


2.
убрать везде заглушки ошибок а-ля @ а обрабатывать исключительные ситуации корректно.

3.
не использовать завершение скрипта без вывода кода/сообщения завершения
exit() exit($error_message);


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kaboom  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43210
На форуме: 4 месяца, 6 дней
Карма:




Правильно ли я понял:
1. Добавить вышеупомянутый фрагмент
2. Убрать @ перед mysqli (в других местах их нет)
3. В эксите написать что-нибудь

Если так, то я попробовал и Денвер начал ругаться на строку if (!$_SESSION['bruteforce'])
----------------------------------------------
Залил пример (пока без вышеупомянутых изменений) для наглядности сюда http://d96585az.bget.ru

Ещё заметил, двойное обновление не требуется, если после сработанной защиты подождать около часа. Затем один раз обновляешь и сразу попадаешь в форму ввода, как надо.

В общем, жду ваших пояснений по доработке, а то может не так делаю просто(?)
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Kaboom  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 7
Пользователь №: 43210
На форуме: 4 месяца, 6 дней
Карма:




Исправил ошибку поменяв значение с 2 на 10 в строчке
if (!empty ($row[2]))


Теперь работает, но понять бы, что я делаю))) Получается массив теперь обращается к ячейке которой не существует?*
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса