Bu adım adım makalede, form tabanlı güvenlik Active Server Pages (ASP) uygulamaları için nasıl anlatılır. Bu mekanizma, uygulama güvenliği artırılmış veya yalnızca kimliği doğrulanmış kullanıcılara izin vermek istediğiniz zaman kullanabilirsiniz. Kullanıcıların ınternet kullanıcıları gibi dahili bir etki alanının parçası olması durumunda, bu mekanizma kullanabilirsiniz. Bu örnek kullanıcıların bilgileri depolamak için bir veritabanı kullanır ve ardından kullanıcıları bu veritabanıyla doğrular.
ÖNKOŞULLAR
- Microsoft Windows NT 4.0 Workstation, Windows NT 4.0 Server, Microsoft Windows 2000 Professional, Windows 2000 Server, Windows 2000 Server veya Microsoft Windows Server 2003 Gelişmiş...
- Microsoft ınternet ınformation Server (IIS) 4.0, Windows NT 4.0 çalıştırılan bilgisayarlar için Windows 2000 çalıştıran bilgisayarlar için Microsoft ınternet ınformation Services (IIS) 5.0 veya Microsoft ınternet ınformation Services (IIS) 6.0, bilgisayarlar için Windows Server 2003 çalıştırıyorsunuz
- Microsoft SQL 6.5 sürümünüzün SP5'e veya SQL Server'ın sonraki bir sürümü
Bu uygulamayı nasıl
Bu bölümde, ASP Web uygulamanızı, form tabanlı güvenlik veya özel güvenlik uygulamak için gereken adımları kısaca açıklanmıştır:
- Bir oturum açma formu kullanıcıya sunar.
- Kullanıcı kimlik bilgileri karşı kullanıcı veritabanınızda saklanan kullanıcı bilgilerini doğrulayın.
- Bir oturum değişkeni oluşturun ve değerini kullanıcı KIMLIğI için ayarlayın.
- Kullanıcının yaptığı her izleyen isteğini, bu oturum değişkeni değerinin yerine boş bir dizeye eşit olduğunu doğrulayın ("") kullanıcı açmış doğrulayın.
- Değişkeni boş ise, kullanıcı geçerli bir kullanıcı değil ya da Kullanıcı oturumdan oturum. Değişken boşsa, kullanıcı oturum açma sayfasına yönlendirir.
- Kullanıcı, veritabanınızda olmadığından, oturum açma başarısız olursa, kullanıcının sitenizde henüz kaydedilmemiş olabilir. Kullanıcı, kullanıcı, sitenizde kaydedebilirsiniz böylece Register.asp sayfaya yeniden yönlendirin. Kullanıcı kaydeder, bu kullanıcı ayrıntıları, kullanıcı veritabanına eklenir.
- Kullanıcı oturumdan oturumu, oturum açma sayfası dışındaki tüm sayfalarda sayfanın dışına günlük için bir bağlantı sağlar. Bu sayfayı kullanıcı KIMLIĞI, boş bir dize atayarak tutan oturum değişkeni temizler ("").
Kullanıcı bir veritabanı tablosu oluşturma
- Başlat ' ı tıklatın, Çalıştır ' ı tıklatın, notepadkutusuna yazın ve Not Defteri'ni başlatmak için ENTER tuşuna basın.
- Aşağıdaki SQL komut dosyası vurgulayın, komut dosyasını sağ tıklatın ve sonra Kopyala ' yı tıklatın. Not Defteri'nde YapıştırDüzenle menüsü üzerinde tıklatın.
CREATE TABLE [Users] (
[uid] [varchar] (25) NOT NULL ,
[password] [varchar] (25) NOT NULL ,
CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED
(
[uid]
) ON [PRIMARY]
) ON [PRIMARY]
GO
- Dosya menüsünde Kaydet ' i tıklatın. Dosya adı</a0> kutusunda, User.txt yazın.
- Başlat ' ı tıklatın, Programlar ' ın üzerine gelin, Microsoft SQL Server ' ın üzerine gidin ve Query Analyzer ' ı tıklatın. SQL Server'a bağlan iletişim kutusunda, SQL Server, kullanıcı KIMLIĞINI ve parolayı SQL Server'a bağlanmaya çalışan sunucunun adını belirtin.
- Dosya menüsünden Aç ' ı tıklatın. Aç iletişim kutusunun içine tıklatın tüm dosyalar (*. *) <a0>Dosya türü</a0> kutusundaki. User.txt listede tıklatın ve sonra Aç ' ı tıklatın.
- Araç çubuğunda VERITABANı iletişim kutusunda, bu tabloyu oluşturmak istediğiniz veritabanını seçin. Bu amaçla belirli bir veritabanı yoksa, pubs örnek pubs veritabanındaki bu tablo oluşturmak için tıklatın.
- Veritabanını seçin sonra sorguyu çalıştırmayı sorgu menüsünde Çalıştır ' ı tıklatın. Bu adım, seçili veritabanında bir kullanıcı tablo oluşturur.
Oluşturma ve sanal dizinini yapılandırma
- Windows Gezgini'nde, Web kökünün altında bir klasör oluşturun. Varsayılan olarak, Web kökü SystemDrive olur: \ınetpub\wwwroot. ASPSecureAPP klasör adı.
- ınternet Hizmetleri Yöneticisi Microsoft Yönetim Konsolu (MMC) açın.
Not Windows NT 4. 0'da, bu MMC ınternet Service Manager olarak adlandırılır.- Windows 2000 veya Windows Server 2003 çalıştıran bir bilgisayarda ınternet Services Manager'ı açmak için Başlat ' ı tıklatın, Çalıştır ' ı tıklatın, inetmgr <a2>Aç</a2> kutusuna yazın ve ENTER tuşuna basın.
- Windows NT 4.0 çalıştıran bir bilgisayarda ınternet Hizmet Yöneticisi'ni açmak için şu adımları izleyin:
- Başlat ' ı tıklatın, Programlar ' ın üzerine gidin, Windows NT 4.0 Option Pack ' ı işaretleyin ve Microsoft ınternet ınformation Server ' ı tıklatın.
- Internet Service Manager ' ı tıklatın.
- Makine genişletmek ve Varsayılan Web sitesi ' ni genişletin. 1. Adımda oluşturduğunuz ASPSecureAPP klasörü sağ tıklatın ve sonra da Properties ' i tıklatın.
- Dizin sekmesinde özellikleri</a0> iletişim kutusunda, dizin bir uygulama olarak işaretlemek için oluşturmaUygulama ayarları</a0> bölümünde'u tıklatın.
Örnek sayfaları oluşturma
Not Bu sayfaları oluşturmak için Not Defteri'ni kullanın, dosyaları kaydederken
Farklı Kaydet iletişim kutusunda, <a1>
Kayıt türü</a1> kutusundaki
Tüm dosyalar tıklattığınızdan emin olun.
Logon.asp
Bu sayfayı, kullanıcıların kullanıcı adlarını ve parolalarını, sitenize erişebilir yazın sağlar.
Aşağıdaki kod yeni bir ASP sayfasına kopyalayın. Logon.asp Inetpub\Wwwroot dizinin ASPSecureAPP klasördeki dosyayı kaydedin.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
%>
<html><body>
<form action="Validate.asp" method="post">
<P>
Login ID:   <INPUT type=text id=UID name=UID> <br>
Password:  <input type="password" id="passwd" name="passwd">
</P>
<input type="submit" value="Logon" id="submit1" name="submit1">
</form>
</body></html>
Validate.asp
Kullanıcının uygulamanıza oturum açmak için kullanıcının oturum açma bilgilerini sağlar bu sayfayı kullanıcı bilgilerini doğrulama sonra sonra da kullanıcı için uygun sayfaya yönlendirir.
Aşağıdaki kod yeni bir ASP kopyalama sayfası. Bağlantı dizesi parametrelerini değiştirir, böylece bunlar geçerli değerler içerdiğinden. Bağlantı dizesi Parametreler şunlardır:
- Kullanıcı KIMLIĞI
- Parola
- Başlangıç Kataloğu
- Veri kaynağı
Dosyayı Validate.asp Inetpub\Wwwroot dizinin ASPSecureAPP klasörüne kaydedin.
<%
Response.Buffer=true
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
Dim userid
Dim Pwd
'Assign the user ID to this variable. The user provides the user ID.
userid= Request.Form("UID")
'Check whether userid is an empty string. If it is empty, redirect to Logon.asp.
'If it is not empty, connect to the database, and validate the user.
if userid <> "" then
pwd = Request.Form("passwd")
Dim Cn
Dim Rs
Dim StrConnect
'Specify the connection string to access the database.
'Remember to change the following connection string parameters to reflect the correct values
'for your SQL server.
StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;Initial Catalog=pubs;" & _
"Network Library=dbmssocn;Data Source=servername"
Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open StrConnect
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open "Select * from Users where uid='" & userid & "'",Cn
'Check to see whether this user ID exists in your database.
If Not Rs.EOF then
If strcomp( pwd, Rs.Fields("password").value , 1) = 0 then
'Password is correct. Set a session variable, and redirect the user to a Default.asp page
'or the main page in your application.
Session("UID") = userid
Response.Redirect "Default.asp"
Response.End
Else
'Password is incorrect. Redirect the user to the logon page.
Response.Redirect "Logon.asp"
Response.End
End if
Else
'If the user is not in your database, point him or her to the Register.asp page
'so that he or she can register at your Web site to access your application.
Response.Redirect "Register.asp"
Response.End
End if
Else
Response.Redirect "Logon.asp"
Response.End
End if
%>
Register.asp
Bu sayfayı, kullanıcıların kullanıcı KIMLIĞINI ve parolasını sitenize erişebilir kayıt sağlar.
Aşağıdaki kod yeni bir ASP kopyalama sayfası. Bağlantı dizesi parametrelerini değiştirir, böylece bunlar geçerli değerler içerdiğinden. Bağlantı dizesi Parametreler şunlardır:
- Kullanıcı KIMLIĞI
- Parola
- Başlangıç Kataloğu
- Veri kaynağı
Dosyayı Register.asp Inetpub\Wwwroot dizinin ASPSecureAPP klasörüne kaydedin.
<%
Response.Buffer=true
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
'Check whether user has submitted user name and password so that you can
'add that user to the users database and register him or her as a valid
'user to use this application.
'This is just the minimal code that you need. You can customize this the way you want.
Dim pwd
Dim userid
userid = Request.Form("uname")
pwd = Request.Form("pwd")
If userid <> "" then
If pwd <> "" then
Dim Cn
Dim Rs
Dim StrConnect
'Specify the connection string to access the database.
'Remember to change the following connection string parameters to reflect the correct values
'for your SQL server.
StrConnect = "Provider=SQLOLEDB.1;User ID=<username>;Password=<strong password>;" & _
"Initial Catalog=pubs;Network Library=dbmssocn;Data Source=servername"
Set Cn = Server.CreateObject("ADODB.Connection")
Cn.Open StrConnect
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open "Select * from Users where uid='" & userid & "'",Cn,3
If Rs.RecordCount>0 then
Response.Write "The Username that you entered has already been taken by someone else."
Response.Write "Use a different Username."
Set Rs = Nothing
Set Cn = Nothing
Else
Dim records
Cn.Execute "INSERT INTO USERS1 (uid,password) VALUES" & _
"('" & userid & "','" & pwd & "')" , records
If records=1 then
Response.Write "You have been registered successfully."
Set Rs = Nothing
Set Cn = Nothing
Session("UID")= userid
Response.Redirect "Default.asp"
Response.End
Else
Response.Write Err.Description
Set Rs = Nothing
Set Cn = Nothing
Response.End
End if
End if
Else
Response.Write "Password is empty. Could not register. Try again."
End if
End if
%>
<html>
<head>
<script language="javascript">
function callsubmit()
{
if (frm1.pwd.value==frm1.pwdc.value) {
frm1.submit();
}
else
{
alert("Password does not match. Re-enter the password");
}
}
</script>
</head>
<body>
<form action="" method="post" id=frm1 name=frm1>
<P>
Login ID:   <INPUT type=text id=uname name=uname> <br>
Password:  <input type="password" id="pwd" name="pwd"> <br>
Confirm Password:  <input type="password" id="pwdc" name="pwdc">
</P>
<input type="button" value="Register" id="submit1" name="submit1" onclick=javascript:callsubmit();>
</form>
</body>
</html>
Logoff.asp
Bu sayfayı, kullanıcıların oturumu sağlar.
Aşağıdaki kod yeni bir ASP sayfasına kopyalayın. Dosyayı Logoff.asp Inetpub\Wwwroot dizinin ASPSecureAPP klasörüne kaydedin.
<%
Response.Buffer=True
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
'Set the session variable to an empty string and also destroy the session to make
'to complete the user session.
Session("UID")=""
Session.Abandon
Response.Redirect "Logon.asp"
Response.End
%>
Default.asp
Oluşturduğunuz diğer sayfalar sınamak için bu sayfayı kullanın.
Aşağıdaki kod yeni bir ASP sayfasına kopyalayın. Dosyayı Default.asp Inetpub\Wwwroot dizinin ASPSecureAPP klasörüne kaydedin.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
if session("UID")="" then
Response.Redirect "Logon.asp"
Response.End
else
Response.Write "You are logged on as " & session("UID") & "<br>"
end if
%>
<HTML>
<BODY>
<A HREF="Logoff.asp">Click here to log off</A>
<BODY>
</HTML>
Doğrulama kodu sayfalara ekleyin...
Aşağıdaki kodu, kullanıcı Web sitenize önceden açmış ve henüz açmamış devre dışı olup olmadığını denetler.
Bu kod bloğunu, güvenliğe ASP sayfalarınızı Logon.asp sayfasını ve Validate.asp sayfanın dışında içine kopyalayın. Bu kod, Logon.asp sayfasını veya Validate.asp sayfaya eklemeyin. Bu kod, ilk görünür amacıyla bu kodu, her sayfanın üst yapıştırmak emin olun.
<%
'The following three lines of code are used to make sure that this page is not cached on the client.
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "no-cache"
Response.Expires = -1
if session("UID")="" then
Response.Redirect "Logon.asp"
Response.End
end if
%>
Bu uygulamanın çalışma biçimi
Aslında, bu uygulamanın herkesin kendi kimlik bilgilerini sağlayarak olmadan görüntüleyebileceği iki sayfa (Logon.ASP ve Register.asp) vardır. Kalan sayfaları görüntülemek için <a0></a0>, kullanıcının geçerli bir kullanıcı KIMLIĞI ve parola kullanarak oturum açmalısınız. Bu nedenle, bir kullanıcı doğrudan oturum açma bilgileri gerektiren herhangi bir sayfaya göz attığında, kullanıcı Logon.asp sayfasına yönlendirilir. Kullanıcılar, geçerli bir kullanıcı KIMLIĞI ve Logon.asp sayfasını parolayı sağlamanız gerekir. Parola doğru değil, kullanıcı yeniden oturum açmayı deneyin.
Kullanıcının kullanıcı KIMLIĞINI ve parolasını veritabanınızda yoksa, kullanıcı kullanıcı uygulamanızın kullanmak üzere kaydedebilirsiniz Register.asp sayfasına yönlendirilir. Kullanıcı ayrıntıları, kullanıcıları doğrulamak için kullandığınız kullanıcı veritabanında girildiğinden emin Register.asp aracılığıyla Web sitenize kullanıcı kayıt sayfası açıldığında.
SORUN GİDERME
- Gereksinimleri ve bu uygulamayı nasıl güvenli durumda bağlı olarak, Güvenli Yuva Katmanı (SSL) şifreleme Logon.ASP kullanıcı kimlik bilgileri düz metin olarak aktarılmasını önlemek için etkinleştirebilirsiniz.
- Bu kullanıcı hesaplarını Windows hesaplarıyla eşler. Bu nedenle, Windows hesaplarınız için bu uygulamayı oturum açmak için doğrudan kullanamazsınız.
- Bu güvenlik mekanizması, ASP oturum tabanlı bilgileri kullanır. Bu nedenle, bu mekanizma, tanımlama bilgileri etkinleştirilmiş olan kullanıcılar için çalışmıyor.
Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleleri görüntülemek üzere aşağıdaki makale numaralarını tıklatın:
172138
(http://support.microsoft.com/kb/172138/
)
ınternet ınformation Services (IIS) sanal dizin oluşturma
282060
(http://support.microsoft.com/kb/282060/
)
ınternet ınformation Services güvenlik altına alma kaynakları
299970
(http://support.microsoft.com/kb/299970/
)
IIS 4.0 veya 5.0 çalışan bir Web sayfasını korumak için NTFS izinlerinin nasıl kullanılır