За последние 24 часа нас посетили 27918 программистов и 1815 роботов. Сейчас ищут 843 программиста ...

Не приятная штука в авторизации

Тема в разделе "PHP для новичков", создана пользователем viktor72, 30 авг 2016.

  1. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Обнаружил дефект не знаю ка его устранить
    если набрать http://adress.info - то захожу в админку
    если браузер услужливо подставлет www и в строке адерс выглядит так http://www.adress.info - то открывается пустая страница.
    форма для авторизации
    HTML:
    1.  <form method="post" action="index.php" >
    2.             ...........................
    3.                         <input type="submit" name="submit2" value="Enter" ></td>
    4. </form>
    возможно проблема тут:

    PHP:
    1. if (!preg_match ("/http\:\/\/adress\.info/", $_SERVER['HTTP_REFERER'])) exit();
    в мануале ничего не нашел.
    Кто может подскажите
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Рекомендуют не adress.info, а example.com, example.org/net

    HTTP_REFERER поищи в гугле что это, должно даже на сайт php_net вести.
     
    viktor72 нравится это.
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Ну да, в этом. А зачем это вообще надо? Типа защита от роботов? Так робот запросто HTTP_REFFER тебе подсунет. И, кстати, HTTP_REFFER - заголовок необязательный, да и генерируется клиентом, и везде говориться, что доверять ему нельзя
     
    viktor72 нравится это.
  4. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    Да, в мануале, прям черным по белом так и написано - доверять нельзя....
    так что убрать эту строку if(!preg_match... ? а чем заменить?
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Какую задачу нужно решить?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    @viktor72, тут вам пытаются объяснить все, что если у вас в скрипте написана какая-то строчка, вы должны знать, зачем она. Если защита от роботов, то ставится капча, к примеру, от гугла, в сети полно мануалов, как её поставить.
     
    viktor72 нравится это.
  7. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    предполагается защита от робота, который перебирает пароль не с браузера, не с моего сайта...
    убрать жалко... удалять каждый раз в адресной строке www , как то не профессионально. Есть альтернативы , кроме капчи?
    --- Добавлено ---
    ой не люблю капчу... если нет других способов, то придётся её ставить... но я думаю не надо обьяснять как утомительно разгадывать каракули которые выдает на капча - "на, разгадывай!".
    Пока что у меня три варианты : 1. удалить защитку, 2. поставить капчу, или 3. удалять каждый раз www .
    пока не знаю что делать.
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    В новой капче от гугла надо просто ткнуть в галку "Я не робот". Чаще всего этого достаточно. Иногда, если гугл подозревает комп в спамерстве, выдаются красивые картинки с предложением выбрать все пироги, всех кошек, все макароны и т.п.
    --- Добавлено ---
    А ещё, вам говорили, но вы не потяните - просто можно после третьей неудачной попытки на час запретить авторизацию
    --- Добавлено ---
    Кстати, по идее, можно www необязательное вставить в вашу регулярку. Но тот, кто пишет ботов, не дурак, и подсунет вам HTTP_REFFER просто на всякий случай :)
    --- Добавлено ---
    Вот такая регулярка пропустит www. Но ещё раз. Защищает только от совсем школьников.
    Код (Text):
    1. "/http\\:\\/\\/(www\\.){0, 1}adress\\.info/"
     
    viktor72 нравится это.
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    у google reCaptcha давно нет каракуль, там либо просто галочку поставить или выбрать картинки на которых пикап или клоуны.

    Обычно админку можно по IP закрыть ещё пароль только раз в 1 минуту принимать, так же сделай админку по не понятному пути /admin_hohoho
     
    viktor72 нравится это.
  10. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    попробовал, не пускает если просто http://adress.info
    --- Добавлено ---
    не ругайтесь сильно, но у меня форма для входа стоит на главной странице. со мной работает ещё три сотрудника, вечно ничего не понимающие, забывающие и т.д... поэтому я для них и делаю как можно проще... поэтому не хочу делать отдельную страницу для входа да ещё и галочку , которая будет травмировать их психику и портить дизайн сайта ...мда...
    --- Добавлено ---
    да я с помощью интернета навоял тут на тему блокировки после третего раза:

    PHP:
    1. if (!$_SESSION['bruteforce'])
    2. {  
    3.    $_SESSION['bruteforce'] = 0;
    4.    $_SESSION['bruteforce_t'] = time ();
    5.    $_SESSION['bruteforce_ip'] = $_SERVER['REMOTE_ADDR'];
    6. }
    7. $_SESSION['bruteforce']++;
    8. if ((time() - $_SESSION['bruteforce_t']) > 20 ) unset ($_SESSION['bruteforce']);
    9. if (!empty ($user_data [3]))
    10. {
    11.     if ( (time() - $user_data [4]) < 20 )
    12.     {  
    13.        exit ("Извините за неудобство. Обновите страницу через 20 секунд");
    14.      
    15.     }
    16.     else
    17.     {
    18.         $user_data = mysql_query ("UPDATE users SET ip='', ip_del_time = '' WHERE login = 'ddddd'");
    19.         if (!$user_data) exit ("#112");
    20.         unset ($_SESSION['bruteforce']);
    21.        
    22.     }      
    23. }
    24. if ($_SESSION['bruteforce'] > 3)
    25. {
    26.     $user_data = mysql_query ("UPDATE users SET ip='$_SESSION[bruteforce_ip]', ip_del_time = '$_SESSION[bruteforce_t]' WHERE login ='ddddd'");
    27.     exit("Извините за неудобство. Обновите страницу через 20 секунд");
    28. }  
    он блокирует даже если не три попытки а просто что то не понравилось
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    стикер на монитор решит проблему

    если из cookie удалить идентификатор сессии, значит обойдут твой лимит?
     
    viktor72 нравится это.
  12. viktor72

    viktor72 Активный пользователь

    С нами с:
    20 дек 2015
    Сообщения:
    326
    Симпатии:
    6
    и что мне делать?
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    хранить счётчик в БД
     
    viktor72 и denis01 нравится это.
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не проверяй реферера вообще, это бессмысленная хрень.
    ты знаешь, на самом деле можно ещё проще. У меня несколько лет работал сайт, у которого админка была по адресу /edit, там не было пароля. Логина тоже не было. Сразу править страницы можно было прям пхп код. За эти несколько лет ничего страшного не произошло. =) Вот так.
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.861
    Симпатии:
    657
    Где-то уже делился. Повесьте админку на поддомен с «хитрым», но необязательно сильно сложным именем. С www – вообще тупняк – нужен редирект на без www, хотя для поддоемена можно полностью от www отказаться.
     
    viktor72 нравится это.