Авторизация  
TEXHO

Защита страниц по IP

В теме 1 сообщение

Все знают, что неплохо бы защищать некоторые страницы (админки, панельки ботнетов, илитных связок и т.д) не только по паролю, но и по IP. Но если вы IP-божм, у которого нет определенного IP-адреса, то возникает проблема. Каждый раз заходить по FTP или SSH, чтобы править .htaccess - это очень обломно. И казалось бы, при таком раскладе, нет смысла ставить защиту по IP.

 

Но для решения этой проблемки, нам понадобиться всего один php-скриптенг и одна маленькая программа (хотя, можно даже и без нее обойтись).

 

Принцип действия следующий: php-скрипт генерирует некое число-вопрос, программа, на основе этого числа-вопроса создает число-ответ (я думаю, вы уже поняли, у кого украдена идея). Если ответ правильный, то в .htaccess записывается наш текущий ip-адрес, а прошлый затирается.

 

Код php-скрипта:

 

Code:
<?php    if($_SERVER['REQUEST_METHOD']=='POST'){        //Тут наша хитрая-прехитрая проверка        if ($_POST['a']==( $_POST['q'] * 7 - $_POST['q'] * 2 + $_POST['q'] * 3) ){            echo "<font color=green><h1>Access granted!</h1></font>";            //Пишем в .htaccess Ip счастливчика            $fh = fopen('.htaccess','w');            // Вместо secret.php - Защищаемая по IP папка или файл            $to_write="<Files secret.php>n".            "order deny,allown".            "deny from alln".            "allow from ".$_SERVER['REMOTE_ADDR'].            "n</Files>";            fwrite($fh, $to_write);            fclose($fh);        } else{            echo "<font color=red><h1>Access denied!</h1></font>";        }    }else{        echo "        <form action='' method='post'>        Q: <input type='text' name='q' value=".rand(1000,9000). "><br>        A: <input type='text' name='a'><br>        <input type=submit value='>>'>        </form>";    }
Код чудо программки (AutoIT):

 

Code:
#include <ButtonConstants.au3>#include <EditConstants.au3>#include <GUIConstantsEx.au3>#include <StaticConstants.au3>#include <WindowsConstants.au3>#Region ### START Koda GUI section ### Form=$Form1 = GUICreate("Калькулятор", 331, 136, 2249, 215)$quest = GUICtrlCreateInput("", 144, 24, 169, 21)$answer = GUICtrlCreateInput("", 144, 56, 169, 21)$Label1 = GUICtrlCreateLabel("Секретный вопрос", 40, 24, 99, 17)$Label2 = GUICtrlCreateLabel("Секретный ответ", 48, 56, 91, 17)$Calculate = GUICtrlCreateButton("Calculate", 144, 88, 107, 33)GUISetState(@SW_SHOW)#EndRegion ### END Koda GUI section ### While 1    $nMsg = GUIGetMsg()    Switch $nMsg        Case $GUI_EVENT_CLOSE            Exit         Case $Calculate            $a = GUICtrlRead($quest)            ;Вся суть нашей хитрой защиты            $b = $a*7-$a*2+$a*3            GUICtrlSetData($answer, $    EndSwitchWEnd
В реале это выглядит так. Заходим на наш php-скрипт:

 

EC_dTbCDT-OVrf0VNbO-UQ.png

 

Копируем вопрос (Q), вставляем в программку:

 

wKlDQaraQ0ap4bO4lSUM3w.png

 

Копируем ответ в php-скрипт, отправляем и теперь только под нашим IP доступна нужная нам папка/файл. Получается в разы быстрее, чем заходить по ftp или ssh.

 

(Можно ускорить процесс, используя не программку на AutoIT, а скрипт в GreaseMonkey, который сам будет заполнять поле ответа. Но это вы уже сами...).

 

Алгоритм, по которому сейчас генерируется число-ответ откровенно убог и сбрутить нужное число можно за час максимум. Однако, ничто не мешает вам дописать туда немыслимые по своей изощренности проверки и вычисления.

 

(Смекалистый одепт уже понял, что можно использовать при генерации числа-ответа числовые значения дня, недели, месяца, года и т.д. Тогда нельзя будет привязать одно число-ответ к одному числу-вопросу).

 

© r00t

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация