" Umut, hiç görmeyen birine gökkuşağını anlatmak kadar zor ve imkansız... "

Categories

-

Asp.Net üye girisi kalan sifre uygulamasi !!!

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

Örnek uygulamayi buradan indirebilirsiniz.

  • 0
  • 1449
  • 0

- BUNLARIDA GÖZDEN GEÇİREBİLİRSİNİZ -

HENÜZ YORUM YAPILMAMIŞ !

Yorum yazın

HAKKIMDA

KONULARI TAKİP EDİN

SOSYAL AĞLAR

  • Mesajınızı Gonderin