Kullanici girislerimizde sifre girisini internet bankaciligindaki gibi belirli sifre girisi hakki ile sinirlayabiliriz....
Bu web sayfamizin kullanici girisi güvenligi uygulamalarinda yardimci olabilir...
Tabi böyle bir uygulama kullanmak veya kullanmamak size kalmis...
Bunun için gerekli basit algoritmayi asagida kurmaya çalisacagim, gelistirmesi size kalmis...
Algoritmayi kurgularsak eger ;
- Adim 1 : Kullanici kayit kontrolü
- Adim 2 : Kullanici kayidi varsa devam et yoksa Adim 1;re git
- Adim 3 : Kullanici sifre kontrolu ve sifre hakki 3 != devam 3 = ise Adim 5;e git.
- Adim 4 : Kullanici sifre kontrolü true ise devam false ise hak - 1 git Adim : 3;ye
- Adim 4 : Kullanici hak +3 devam et, sisteme giris
- Adim 5 : Hata mesaji göster Adim 6 ya git.
- Adim 6 : Çikis yap
Basit bir algoritma düsünerek böyle gösterilebilir... Simdi sayfalarimizda kodlayacak olursak eger;
Örnegimizde 3 .aspx sayfasi kullanarak hazirladim.
1. Sayfamiz default.aspx sayfamiz olacak, kullanici kayit islemi gerçeklestirilecek,
2. sayfamiz kullanici girisi sayfasi olacak, burada kullanici giris islemini gerçeklestirecek ve sifre kontrolü yapilacak,
sifresini 3 kez hatali girmesi durumunda sifresi bloke edilecek, dogru girmesi durumunda ise
kalan hakki 3;e güncellestirilcek ve son sayfa olarak sifre degistirme sayfasi ekledim.
Burda kullanici sifresini degistirecek...
Veritabani islemlerini class dosyasinda gerçeklestirdim.
Örnek uygulama bu sekilde...
Default.aspx sayfasi kodlarimiz ;
Imports System.Data
Imports System.Data.OleDb
Imports System.Security.Cryptography
Imports veribaglanti
Partial Class _Default
Inherits System.Web.UI.Page
Dim class1 As New veribaglanti
Dim baglanti As OleDbConnection = class1.baglan
Protected Sub Button1_Click(sender As Object, e As System.EventArgs) Handles Button1.Click
' VeriTabanina üye girisi kayidini gerçeklestiyoruz sorgumuzu veribaglanti.vb Class dosyamizdan aliyoruz...
' Kullanici sifrelerini MD5 and SHA1 sifreleme algoritmasi kullanarak gerçeklestiriyoruz...
Dim sifrelenecekVeri2 As String = TextBox2.Text
Dim md5 As MD5 = New MD5CryptoServiceProvider
Dim sifrelenmisveri1 As String = Convert.ToBase64String(md5.ComputeHash(Encoding.UTF8.GetBytes(sifrelenecekVeri2)))
Dim SifrelenecekVeri1 As String = SifrelenmisVeri1
Dim sha As SHA1 = New SHA1CryptoServiceProvider
Dim SifrelenmisVeri2 As String = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(SifrelenecekVeri1)))
class1.verikayit("insert into Tbl_Kullanici (kullanici,sifre) values (?,?)", CommandType.Text, OleDbType.Char, OleDbType.Char, TextBox1.Text, SifrelenmisVeri2)
Label5.Text = "Kayit islemi basari ile tamamlandi..."
TextBox1.Text = ""
TextBox2.Text = ""
End Sub
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Dim tablo As DataTable = class1.GetDataTable("Select * From Tbl_Kullanici") 'Veritabaninda kayitli kullanicilarimizi Datalistte listeletiyoruz...
DataList1.DataSource = tablo
DataList1.DataBind()
End Sub
End Class
login.aspx sayfasi kodlarimiz ;
Imports System.Data
Imports System.Data.OleDb
Imports System.Security.Cryptography
Partial Class _Default
Inherits System.Web.UI.Page
Dim baglanti As New OleDbConnection("provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("App_Data\vt1.mdb"))
Dim sorgu As OleDbCommand
Dim dr As OleDbDataReader
Dim kalan As Integer = 0
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
' Kullanici sifrelerini MD5 and SHA1 sifreleme algoritmasi kullanarak gerçeklestiriyoruz...
Dim sifrelenecekVeri1 As String = txtSifre.Text
Dim md5 As MD5 = New MD5CryptoServiceProvider
Dim sifrelenmisveri1 As String = Convert.ToBase64String(md5.ComputeHash(Encoding.UTF8.GetBytes(sifrelenecekVeri1)))
Dim SifrelenecekVeri2 As String = sifrelenmisveri1
Dim sha As SHA1 = New SHA1CryptoServiceProvider
Dim SifrelenmisVeri2 As String = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(SifrelenecekVeri2)))
' ExecuteRearder : Yürütülen komut sonrasi geriye DataRearder Nesnesi döndürür...
' Kullanici adimizi ve parolamizi veritabanindan sorgulatiyoruz..
baglanti.Open()
sorgu = New OleDbCommand("Select * from Tbl_Kullanici Where kullanici=@kul", baglanti)
sorgu.Parameters.AddWithValue("@kul", kullanici.Text)
dr = sorgu.ExecuteReader()
If dr.Read() = True Then
sorgu = New OleDbCommand("select * from Tbl_Kullanici Where kullanici=@Kullanici and (sifre=@Sifre and + durum=true)", baglanti)
sorgu.Parameters.AddWithValue("@Kullanici", kullanici.Text)
sorgu.Parameters.AddWithValue("@Sifre", SifrelenmisVeri2)
dr = sorgu.ExecuteReader() ' Sorgulamimizdan dönen degeri count degiskenimize atiyoruz...
If dr.Read() = False Then ' Eger dönen deger false ise sifre yanlis girilmis ise asagidaki sorgumuza geçiyoruz...
' Asagida kullanici bilgileri okumak için DataRearder nesnesi tanimliyoruz...
sorgu = New OleDbCommand("Select * from Tbl_Kullanici Where kullanici=@kullanici", baglanti)
sorgu.Parameters.AddWithValue("@kullanici", kullanici.Text)
Dim dr As OleDbDataReader = sorgu.ExecuteReader
If dr.Read() = True Then
If dr("sayac") = 0 Then ' Eger veritabaninda sayac 0 ise yani sifre giris hakki kalmadiysa uyari veriyoruz...
Label1.Text = "Sifreniz Bloke edilmistir..."
Else ' sayac 0 degilse kullanici sifre girisi hakki varsa asagidaki komutlara geçiyoruz...
Static k_hak As Byte = dr("sayac") 'Sayacimizi okuyup kalan_hak degiskenize Statik degiskenimize atiyoruz...
Dim giris As Byte = 0 ' giris degiskeni olusturup 0 degerini atiyoruz...
giris = giris + 1 ' ve 0 degerini 1 arttiyoruz...
kalan = k_hak - giris ' kalan_hak dan giris degeri 1 cikariyoruz...
'Mesela veritabaninda sayac 2 ise kullanicinin 2 giris hakki kalmis ise yanlis sifre denemesi girisi
'yaptigi için giris degiskenini 1 arttirip kalan_haktan 1 cikariyoruz...
ve 1 sifre denemesi kaliyor ve onuda asagidaki komut ile Update ederek veritabanina kayit ediyoruz...
sorgu = New OleDbCommand("Update Tbl_Kullanici Set sayac=@hak Where kullanici=@kullanici", baglanti)
sorgu.Parameters.AddWithValue("@hak", kalan)
sorgu.Parameters.AddWithValue("@kullanici", kullanici.Text)
sorgu.ExecuteNonQuery()
' veritabanina kayit edip uyari verdiyoruz...
Label1.Text = "Hatali giris yaptiniz !!!" + " " + Convert.ToString(kalan)
If kalan = 0 Then ' kalan degiskeni 0 oldugunda ise veritabaninda durum degerini false yapip bloke ediyoruz...
sorgu = New OleDbCommand("Update Tbl_Kullanici Set sayac=@sayac,durum=false Where kullanici=@kullanici", baglanti)
sorgu.Parameters.AddWithValue("@sayac", kalan)
sorgu.Parameters.AddWithValue("@kullanici", kullanici.Text)
sorgu.ExecuteNonQuery()
Label1.Text = "Sifreniz Bloke Edilmistir..."
End If
End If
End If
Else ' Dogru sifre girisi yapilmissa eger sayac yani kalan_hak kismini 3 yapip sifre degistir .aspx sayafamiza yönlendiriyoruz...
Dim hak As Byte = 3
sorgu = New OleDbCommand("Update Tbl_Kullanici Set sayac=@hak Where kullanici=@kullanici", baglanti)
sorgu.Parameters.AddWithValue("@hak", hak)
sorgu.Parameters.AddWithValue("@kullanici", kullanici.Text)
sorgu.ExecuteNonQuery()
Session("Basarili") = "okandüzgün"
Response.Redirect("sifre_degistir.aspx")
End If
Else
Label1.Text = "Kullanici Bulunamadi !!!"
End If
dr.Close()
sorgu.Dispose()
baglanti.Close()
baglanti.Dispose()
End Sub
End Class
Sifre degistir sayfamiz ;
Imports System.Data
Imports System.Data.OleDb
Imports System.Security.Cryptography
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Session("Basarili") = "okandüzgün" Then ' giris sayfamizdan dogru giris yapilip Basarili session degeri kontrol ediyor, okandüzgün degeri geliyorsa dogru sayilip asagidaki kod satirlari isletiliyor...
Response.Redirect("uye_giris.aspx")
End If
End Sub
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If TextBox1.Text = "" Then 'Eger textbox bossa
Label1.Text = "Sifre bos olamaz.Lütfen tekrar deneyiniz..." 'Ekrana "Sifre bos olamaz" yazacak
Else
Dim sifrem As String = TextBox1.Text ' Sifreyi aldik
Dim sifrelenecekVeri2 As String = TextBox1.Text
Dim md5 As MD5 = New MD5CryptoServiceProvider
Dim sifrelenmisveri1 As String = Convert.ToBase64String(md5.ComputeHash(Encoding.UTF8.GetBytes(sifrelenecekVeri2)))
Dim SifrelenecekVeri1 As String = sifrelenmisveri1
Dim sha As SHA1 = New SHA1CryptoServiceProvider
Dim SifrelenmisVeri2 As String = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(SifrelenecekVeri1)))
Dim baglanti As New OleDbConnection
baglanti.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=" & Server.MapPath("App_Data\vt1.mdb") ' VT'na baglandik
baglanti.Open() 'baglantimizi açtik
' yukarida md5ledigimiz sifreyi vt'deki sifre ile degistirmek için gerekli sorguyu yazdik
Dim cmd As New OleDbCommand("update Tbl_Kullanici set Sifre=" & "'" & SifrelenmisVeri2 & "'", baglanti) cmd.ExecuteNonQuery() 'Sorgumuzu çalistirdik
baglanti.Close() ' Baglantimizi kapattik.
Label1.Text = ("Sifreniz Basari Ile Degistirildi...") 'Ve sifremiz degistirildi :)
End If
End Sub
Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Session.Abandon() ' Çikis islemimizi gerçeklestirdik...
Response.Redirect("default.aspx") ' Default sayfamiza yönlendirmemizi yaptik.
End Sub
End Class
Veritabani islemlerini gerçeklistirdigimiz class dosyamiz ;
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.OleDb
Public Class veribaglanti
Public Function baglan() As OleDbConnection
Dim yol As String = System.Web.HttpContext.Current.Server.MapPath("App_Data/vt1.mdb") ' Veritabani yolumuzu belirtiyoruz...
Dim baglanti As New OleDbConnection("Provider=Microsoft.jet.OleDb.4.0; Data Source=" + yol) ' Connection Nesnesi tanimliyoruz ve kullanilacak provider ve veritabani yolunu belirliyoruz...
Return baglanti ' Baglanti nesnemizi gönderiyoruz...
End Function
Public Function verikayit(Sqlcumle As String, cmdType As CommandType, OldbType1 As OleDbType, OldbType2 As OleDbType, deger1 As String, deger2 As String) As Integer ' Fonkisyonumuzu ve degerlerimizi tanimliyoruz...
Dim baglanti As OleDbConnection = Me.baglan() ' Yukaridaki baglan fonksiyonumuzu dahil ediyoruz...
Dim sorgu As New OleDbCommand(Sqlcumle, baglanti) ' OledbCommand nesnemizi tanimlayip sql cümle sorgusu için stringimizi ve baglantimizi dahil ediyoruz...
sorgu.Parameters.Add("?", OldbType1, 35).Value = deger1 ' Parametre ve degerlerimizi ekliyoruz...
sorgu.Parameters.Add("?", OldbType2, 30).Value = deger2 ' Parametre ve degerlerimizi ekliyoruz...
sorgu.Connection = baglanti 'Command nesnesini Connection nesnesiyle iliskilendiriyorz...
Dim sonuc As Integer = 0
Try ' Hiç bir sikinti olmadan islemimiz çalismis ise Try araligi çalisacak
baglanti.Open()
sonuc = sorgu.ExecuteNonQuery()
Catch ex As OleDbException ' Eger problem varsa Catch bölümü çalisacak...
Throw New Exception(ex.Message) ' Hata mesajini ekrana yazdiracak...
End Try
sorgu.Dispose()
baglanti.Close()
baglanti.Dispose()
Return (sonuc) ' Geriye sonuç degiskenini döndürecek...
End Function
Public Function GetDataTable(SqlCumle As String) As DataTable 'Datatable nesnemiz...
Dim baglanti As OleDbConnection = Me.baglan
Dim Adapter As New OleDbDataAdapter(SqlCumle, baglanti)
Dim DataTable As New DataTable
Dim sonuc As Integer = 0
Try
baglanti.Open()
Adapter.Fill(DataTable)
Catch ex As OleDbException
Throw New Exception(ex.Message)
End Try
Adapter.Dispose()
baglanti.Dispose()
baglanti.Close()
Return DataTable
End Function
End Class