Ставим пароль на страницу
Данная статья не претендует на какие-то откровения, все эти вещи достаточно очевидны и широко известны. Но получив за последнее время несколько вопросов об ограничении доступа к web-страницам, я решил свести ответы на них вместе.
Итак, наша задача - установить пароль на доступ к некоторой странице. Начнем с самого примитивного способа, если можно так сказать, защиты - нескольких строчек на JavaScript'е. Код - что-то вроде
var pass = prompt("Enter the Password:", "");
if (pass == null)
window.location = "bad.html";
else if (pass.toLowerCase() == "wwvsfc")
window.location = "ok.html";
else
window.location = "bad.html";
Результат можно наблюдать, к примеру, здесь. Ухищрения наподобие скрытия скрипта в отдельном файле с помощью конструкции <SCRIPT SRC="security.js"></SCRIPT> принципиально ничего не меняют.
Уровнем повыше расположена аналогичная система, реализованная на Java.
Ниже приведен упрощенный исходный код.
import java.applet.*;
import java.awt.*;
import java.net.*;
public class Password extends Applet
{
TextField login, password;
String Login = "login";
String Password = "Password";
public Password()
{
}
public void init()
{
Panel panel = new Panel();
panel.setLayout(new GridLayout(2,2));
login = new TextField(20);
password = new TextField(20);
panel.add(new Label("Login:"));
panel.add(login);
panel.add(new Label("Password:"));
panel.add(password);
add(panel);
add(new Button("Ok"));
}
public boolean action(Event evt, Object obj)
{
if(evt.target instanceof Button)
{
String s;
if(login.getText().equals(Login) && password.getText().equals(Password) )
{
s = "http://www.hackzone.ru/articles/ok.html";
}
else
{
s = "http://www.hackzone.ru/articles/bad.html";
}
try
{
getAppletContext().showDocument(new URL(s));
}
catch(Exception e)
{
password.setText(e.toString());
}
return true;
}
return false;
}
}
Включив этот апплет в страницу, можно получить нечто такое (во всех последующих примерах используются ok.html и bad.html от скрипта для выставления оценок статьям - ну лениво мне готовить еще какие-то страницы):
Его можно сделать поумнее, завести для каждого пользователя отдельную страницу, заставить считывать данные из файла и т.д. Принципиальный недостаток - после того как человек попал на искомую страницу, никто не в силах запретить ему запомнить этот URL, так что средство это одноразовое. Конечно, можно запрятать страницу внутрь фрейма, чтобы URL не светился в строке адреса, но сами понимаете, от кого эта защита. Опять же, апплет полностью уходит к клиенту и в принципе полностью доступен для исследования.
Последнего недостатка лишено решение, основанное на использовании CGI. Простенький скрипт на Perl'е выглядит примерно так:
# |