Включив этот апплет в страницу, можно получить нечто такое:
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: | |
Старый пароль: |