Аутентифікація користувачів за допомогою ASP h2>
Христофоров Юрій p>
У цій статті буде розказано, як зареєстрованим
користувачам дозволити доступ до якоїсь секретної asp сторінці, а стороннім
немає. p>
Постановка завдання: Є база даних Access 97, в
якій зберігаються імена зареєстрованих користувачів і їх паролі, і є
якась секретна сторінка, доступ до якої повинні мати тільки користувачі,
занесені до БД. Паролі в БД потрібно зберігати в зашифрованому вигляді.
Перевага такого підходу в тому, що поля бази даних, що містять паролі, не
містять реальних значень і їх не можна використовувати при вході в систему. p>
Для роботи нам знадобиться ActiveX компонент Ecrypt,
який Ви можете взяти на цьому сайті в розділі ActiveX. p>
Рухаємося по кроках: p>
1. Створити БД в Access. Ім'я таблиці - TUSERS.
Опис полів: p>
n_id - Счетчик (Primary Key) p>
s_name - Текстовий p>
s_password - Текстовий p>
Потім створіть DSN для цієї БД. При роботі з WindowsNT
(2000) необхідно створити System DSN, а при роботі з Windows95-98 можна створити
і User DSN. Дайте DSN ім'я reg. P>
2. Напишемо ActiveX DLL Auth на Visual Basic 6, яка
буде виконувати основну роботу. Запустіть Visual Basic 6 і у вікні New Project виберемо ActiveX DLL. Перейменуємо
ім'я проекту на Auth, а ім'я класу на Security. Тепер треба підключити
необхідні бібліотеки: вибираємо Project -> References ... p>
Підключаємо бібліотеки Microsoft ActiveX Data Objects
2.1 Library і ECrypt 1.0 Type Library (див. вище). P>
3. Далі набираємо наступний код: p>
Option Explicit p>
Private cn As
ADODB.Connection p>
Private rs As
ADODB.Recordset p>
Private sName As
String 'Ім'я користувача p>
Private sPasswd As
String 'Пароль p>
Private sError As
String p>
Private sResult As
Integer 'Результат p>
Public Property Get
Result () As Integer p>
Result = sResult p>
End Property p>
Public Property Let
InitName (ByVal Name As String) p>
sName = Name p>
End Property p>
Public Property Let
InitPassword (ByVal Passwd As String) p>
sPasswd = Passwd p>
End Property p>
Private Sub
Class_Initialize () p>
sError = "" p>
Set cn = New ADODB.Connection p>
cn.Open
"DSN = reg" 'Встановимо з'єднання p>
Set rs = New
ADODB.Recordset p>
End Sub p>
Private Sub
Class_Terminate () p>
Set rs = Nothing p>
Set
cn = Nothing p>
End Sub p>
'Реєструє користувачів p>
Public Sub
Register () p>
On Error GoTo Er p>
rs.Open
"SELECT N_ID FROM TUSERS WHERE S_NAME = '" & sName &
" '", Cn, 1 p>
'Якщо користувач із такою назвою вже є, то p>
If rs.RecordCount
<> 0 Then p>
sResult = 1 'Повертаємо результат p>
rs.Close p>
cn.Close p>
Exit Sub 'Вихід p>
End If p>
Dim crypt_obj As
ECRYPTLib.Cryptor p>
Dim crypt_pass As
String p>
Set crypt_obj = New
ECRYPTLib.Cryptor p>
crypt_obj.Key =
"Visual Basic + 6!" 'Ключ шифрування p>
crypt_obj.Text =
sPasswd 'Пароль p>
crypt_pass =
crypt_obj.coder () 'шифруємо p>
'Додаємо нову запис p>
cn.Execute
"INSERT INTO TUSERS (S_NAME, S_PASSWORD) VALUES ( '" &
Replace (sName, " '", "''") & _ p>
"','" & Replace (crypt_pass,
" '", "''") & "')" P>
sResult = 0 'Все пройшло успішно p>
rs.Close p>
cn.Close p>
Exit Sub p>
Er: p>
sResult
= 2 'Неочікувана помилка p>
End Sub p>
'Перевірка користувачів p>
Public Sub Check () p>
On Error GoTo Er p>
rs.Open
"SELECT S_NAME, S_PASSWORD FROM TUSERS WHERE S_NAME = '" & sName
& " '", Cn, 1 p>
'Якщо немає користувача з таким ім'ям p>
If rs.RecordCount =
0 Then p>
sResult = 1 p>
rs.Close p>
cn.Close p>
Exit Sub p>
End If p>
Dim tmp As String p>
tmp =
rs.Fields ( "S_PASSWORD") p>
Dim uncrypt_obj As
ECRYPTLib.Cryptor p>
Dim uncrypt_pass As
String p>
Set uncrypt_obj =
New ECRYPTLib.Cryptor p>
uncrypt_obj.Key =
"Visual Basic + 6!" P>
uncrypt_obj.Text = tmp p>
'розшифровує паролі із БД p>
uncrypt_pass =
uncrypt_obj.decoder () p>
'Якщо вони не збігаються p>
If uncrypt_pass
<> sPasswd Then p>
sResult = 3 p>
rs.Close p>
cn.Close p>
Exit Sub p>
End If p>
sResult = 0 'Все нормально p>
rs.Close p>
cn.Close p>
Exit Sub p>
Er: p>
sResult
= 2 'Неочікувана помилка p>
End Sub p>
Компіліруем проект і отримуємо Auth.dll. p>
4. Наступний крок - це написання asp і htm сторінок. P>
start.htm - сторінка з формою, щоб ввести ім'я та пароль p>
Ім'я та пароль повинні містити тільки латинські букви
і символи !!! p>