Защита сайтов


Ставим пароль на страницу - часть 2


Включив этот апплет в страницу, можно получить нечто такое:

Password check

Его можно сделать поумнее, завести для каждого пользователя отдельную страницу, заставить считывать данные из файла и т.д. Принципиальный недостаток - после того как человек попал на искомую страницу, никто не в силах запретить ему запомнить этот URL, так что средство это одноразовое. Конечно, можно запрятать страницу внутрь фрейма, чтобы URL не светился в строке адреса, но сами понимаете, от кого эта защита. Опять же, апплет полностью уходит к клиенту и в принципе полностью доступен для исследования.

Последнего недостатка лишено решение, основанное на использовании CGI. Простенький скрипт на Perl'е выглядит примерно так:

#!/usr/bin/perl use CGI qw(:standard); $query = new CGI; $ok = 'ok.shtml'; $address = 'bad.shtml'; $login = "login"; $password = "password"; $l = $query->param("login"); $p = $query->param("password"); if(($p eq $password) && ($l eq $login)) { $address = $ok; } print $query->redirect($address);

Пример использования:

Password check

Login:
Старый пароль:

Чтобы справиться с первым недостатком, можно динамически сформировать новую страницу на основе спрятанной где-то там внутри, не выдавая при этом URL.

Модифицированный код:

#!/usr/bin/perl use CGI qw(:standard); $query = new CGI; $ok = '/internet/pswpage/ok.shtml'; $address = '/internet/pswpage/bad.shtml'; $docroot = $ENV{'DOCUMENT_ROOT'}; $localpath = "/internet/pswpage/"; $login = "login"; $password = "password"; $l = $query->param("login"); $p = $query->param("password"); if(($p eq $password) && ($l eq $login)) { $address = $ok; } print $query->header(); open (FL, $docroot.$localpath.$address); while(<FL>) { # Здесь заодно можно на лету модифицировать html-код # Зачем ? Ну мало ли... :) print $_; } close (FL);

Пример использования:

Password check

Login:
Старый пароль:
<


- Начало -  - Назад -  - Вперед -