Иногда требуется быстрое решение чтобы прикрыть админку, дополнительной защитой. Или произвольную папку.
Простенький вариант который я использую, это связка .htaccess и php.
1 2 3 4 5 6 7 |
# https://fstrange.ru/coder/php/prostaya-zashhita-adminki.html RewriteEngine On RewriteBase / # secret_file.php игнорируем. Он будет выставлять нужную печеньку RewriteRule ^secret_file\.php$ - [NC,L] RewriteCond %{HTTP_COOKIE} !secret_key=secret_value [NC] RewriteRule .* http://%{HTTP_HOST}/index\.php [L] |
Этот .htaccess кладем в защищаемую папку. Проверяется наличие куки с парой ключей. Если куки нет, идет редирект на главную страницу сайта. И secret_file.php , функция которого проста, сгенерить нужную нам куку.
1 2 3 4 5 6 7 |
<?php /** * https://fstrange.ru/coder/php/prostaya-zashhita-adminki.html */ SetCookie('secret_key', 'secret_value', time()+(60*60*3), '/'); header('Location: '.dirname($_SERVER['REQUEST_URI'])); |
В примере установлено, время жизни куки, 3 часа (time()+(60*60*3)) , через это время вас выкинет из папки. secret_file.php лучше переименовать(и в .htaccess тоже) ,как нибудь умно, например qwerty.php 🙂
Все просто, но есть несколько подводных камней. Очевидные опущу. Расскажу про баг с которым столкнулся.
На некоторых броузерах Opera, IE кука с маленьким временем (15 минут) не выставлялась. Причем баг не воспроизводился у меня на машине, на броузерах тех же версий. А у клиента на нескольких машинах.
Предположительно баг как то связан с таймзоной, но до конца я его не исследовал, решил проблему и ладно
Свежие комментарии