Pvp Server | Pvp Serverler | Metin2 Pvp İp Adresleri | Knight Online Bilgi Paylaşım Platforumu

Would you like to react to this message? Create an account in a few clicks or log in to continue.


    ürkçe ID ve Şifre Engelleme %100

    LiveYourLife
    LiveYourLife
    Forum Kurucusu
    Forum Kurucusu


    Mesaj Sayısı Mesaj Sayısı : 525
    Leader Point: Leader Point: : 18321
    Kayıt tarihi Kayıt tarihi : 19/01/10
    Nerden Nerden : Derinliklerden :)

    ikon10 ürkçe ID ve Şifre Engelleme %100

    Mesaj tarafından LiveYourLife Ptsi Ocak 25, 2010 4:23 pm

    elamlar,

    Kendi Veritabanımda Kullandığım Regex(Regular Expression) Sizinle Paylaşayım Dedim, Baktım Bir Dünya Konu Var..

    2 Aşama Göreceksiniz fakat Sadece 1. Aşama da İşinizi Görür, 2. Aşama Sadece Ek Güvenlik Tercihe Bağlı...

    Gel Gelelim 1. Aşamayı Uygulayınca Ne Olacak ?

    Şöyle Diyeyim "a-Z / 0-9 / _" Karakterleri Sadece ID ve Şifrede Kullanabilir, Kesinlikle Hiç Bir ASCII Karakter ile Oyuna Giremez Tamamiyle %100'dür.

    Kullanılabilecek Küçük Harfler : abcdefghijklmnoprstuvyzxwq
    Kullanılabilecek Büyük Harfler : ABCDEFGHIJKLMNOPRSTUVYZXWQ
    Kullanılabilecek Sayılar : 0123456789
    Kullanılabilecek Karakterler : _ (Alttan Tire, Aşağıda İsterseniz Onuda Kaldırabilirsiniz)

    Kısacası Mevcutta Kullandığınız RULES v.s. ne Var ise Silin Gitsin, Son Nokta Konulmuştur ürkçe ID ve Şifre Engelleme %100 Smile

    1. AŞAMA (Türkçe Karakterin ve Tüm Karakterlerin Tarih Olması) ;

    Fonksiyonumuz ;

    Kod:
    CREATE FUNCTION [dbo].[IsValidCharacters](@SData varchar(8000))
    RETURNS INT
    AS
    /*
    Author : AKUMA
    Update : 16.10.2009 - 15:30
    */
    BEGIN

    DECLARE @SDataLen int
    DECLARE @Loop int
    DECLARE @Letter varchar(1)
    DECLARE @RXLetters varchar(8000)
    DECLARE @Match tinyint

    SET @RXLetters = 'qwertyuopasdfghjklizxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_'
    SET @SDataLen = LEN(@SData)
    SET @Loop = 1
    SET @Match = 0

    WHILE @Loop < (@SDataLen + 1)
    BEGIN

    SET @Letter = RTRIM(LTRIM(SUBSTRING(@SData,@Loop,1)))

    IF CHARINDEX(@Letter,@RXLetters) = 0
    BEGIN
    SET @Match = 1
    BREAK
    END

    SET @Loop = @Loop + 1
    END

    RETURN @Match
    END
    Önemli Bilgiler ;
    Kod:
    -- Aşağıda '.....' Arasına Koyduğunuz Her Karakter Geçerli Karakter
    Sayılır Örneğin Æ yi Koyarsanız Geçerli Olur, Koymazsanız Geçersiz Olur.

    SET @RXLetters = 'qwertyuopasdfghjklizxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890_'
    Kodun Uygulanması ;
    ACCOUNT_LOGIN,ACCOUNT_LOGIS,MAIN_LOGIN veya MYST_LOGIN Ana Logininiz Hangisi ise...

    Kod:
    CREATE PROCEDURE [dbo].[ACCOUNT_LOGIN]
    @AccountID varchar(21),
    @Password varchar(13),
    @nRet smallint OUTPUT

    AS

    -- Tam Buraya
    AS'ın Hemen Altına Şunu Yazıyorsunuz... (Alttan Tire Kullanılabilir Hali.)

    Kod:
    IF dbo.IsValidCharacters(@AccountID) = 1
    BEGIN
    SET @nRet = 2 -- Hesap Bulunamadı.
    RETURN
    END

    IF dbo.IsValidCharacters(@Password) = 1
    BEGIN
    SET @nRet = 3 -- Şifreniz Hatalıdır.
    RETURN
    END
    2. AŞAMA (EK Güvenlik) : Aynı Anda İki Hesabın Oyuna Girmesine Engeller, Örneğin "aktas" Diye Bir Hesabım Var Benim Biride "aktaş" Açtı fakat Birşekilde Paketleri Editledi ve "aktas" Yapıp Karaktere Girmesini Engellemektedir.

    PROC_INSERT_CURRENTUSER'nüzü
    Açın ve SET @nRet = 1 Yazan Yerin Hemen Üstüne Dikkat Edin Üstüne
    Altına Değil Alttaki Kodu Yapıştırın ve Kaydedin Bu Kadar.


    Kod:
    DECLARE @RAccountID char(21)
    /*
    Author : AKUMA
    Update : 26.07.2009 - 22:45
    */
    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID1 = @CharID and strCharID1 IS NOT NULL
    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID2 = @CharID and strCharID2 IS NOT NULL
    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID3 = @CharID and strCharID3 IS NOT NULL

    IF @RAccountID IS NULL
    BEGIN
    SET @nRet = 0
    RETURN
    END
    ELSE IF @RAccountID = ''
    BEGIN
    SET @nRet = 0
    RETURN
    END
    ELSE IF @RAccountID <> @AccountID
    BEGIN
    SET @nRet = 0
    RETURN
    END
    Yapamıyanlar İçin Komple PROC_INSERT_CURRENTUSER (Ekisini Silin Bunu Koyun Yerine - Query Any.)

    Procedürü Silemiyenler Bu Şekilde Silebilir.


    Kod:
    DELETE PROC PROC_INSERT_CURRENTUSER
    Kod:
    CREATE PROCEDURE PROC_INSERT_CURRENTUSER
    @AccountID char(21),
    @CharID char(21),
    @ServerNo int,
    @ServerIP char(15),
    @ClientIP char(15),
    @nRet smallint output
    AS
    /*
    Author : AKUMA
    Update : 26.07.2009 - 22:12
    */

    INSERT
    INTO CURRENTUSER (nServerNo, strAccountID, strCharID, strServerIP,
    strClientIP) VALUES (@ServerNo, @AccountID, @CharID,@ServerIP,@ClientIP)

    DECLARE @RAccountID char(21)

    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID1 = @CharID and strCharID1 IS NOT NULL
    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID2 = @CharID and strCharID2 IS NOT NULL
    SELECT @RAccountID = strAccountID FROM ACCOUNT_CHAR WHERE strCharID3 = @CharID and strCharID3 IS NOT NULL

    IF @RAccountID IS NULL
    BEGIN
    SET @nRet = 0
    RETURN
    END
    ELSE IF @RAccountID = ''
    BEGIN
    SET @nRet = 0
    RETURN
    END
    ELSE IF @RAccountID <> @AccountID
    BEGIN
    SET @nRet = 0
    RETURN
    END
    ELSE
    BEGIN
    SET @nRet = 1
    RETURN
    END
    Kolay Gelsin...!

      Forum Saati Perş. Kas. 21, 2024 11:50 am