Hesap Güvenliği (Password MD5 Şifreleme)

  • Konbuyu başlatan Konbuyu başlatan AKUMA
  • Başlangıç tarihi Başlangıç tarihi
Konu Yazar

AKUMA

Active Member
Emektar
Haz
437
36
Selamlar,

Umarım En Yararlı Paylaşım Olur,

Bu Sistemin Size Faydaları DB niz Çalınsa Bile Kullanıcılarınızın Şifresi Asla Gözükmez, Bu Yüzden Herhangi Bir Korkunuz Olmaz Onu Bırakın Serverınıza Girmiş Olsalar Bile Şifreler Karşılarına,

0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0AB49

Şeklinde Çıkacaktır, Bu Şifreyi Alıp Yazsa Bile Geçersizdir, Kesinlikle Decrypti Herhangi Bir Yerde Yoktur. (MSSQL 2005'te Test Edilmiştir ve Şuanda Kendi Sunucumda Çalışmaktadır.)

Kısacası Kendilerini Yırtsalarda Bu Şifrelerin Orjinal Hallerini Göremezler, İsterse DB deki Herşeyi Silsinler Veriler Bu Şekilde Kalır ve DECYPT(Çözümlenemez) Edilemez.

%100 Güvenlidir.

Başlıyoruz Kuruluma :P

kn_online DB nizin Query Analizerine Giriyoruz.

Hashı Oluşturan Fonksiyonumuz.

Kod:
CREATE FUNCTION CreateHash(@Data text)
/*
Author : AKUMA
*/
RETURNS varbinary(255)
BEGIN
 DECLARE @Hash varbinary (255)
 SET @Hash = pwdencrypt(@Data)
 RETURN @Hash
END

Hash Kontrolü Yapan Fonksiyonumuz...

Kod:
CREATE FUNCTION CheckHash(@Data text,@Hash varbinary(255))
/*
Author : AKUMA
*/
RETURNS int
BEGIN
 DECLARE @CheckStatus int
 SET @CheckStatus = pwdcompare(@Data,@Hash)
 RETURN @CheckStatus
END

Önce TB_USER Tablomuza Şifrelenmiş Şifreleri Binary Olarak Yazacağımız Bir Alan Ekliyoruz...

Kod:
ALTER TABLE TB_USER ADD strPasswdBackup varbinary(255) NOT NULL DEFAULT 0;

Sonrasında Çalıştıracağımız Kod (İşlem Biraz Uzun Sürebilir User Sayısı Hızı Belirler.)

Kod:
DECLARE @strAccountID varchar(50),@strPasswd varchar(50),@strPasswdBackup varbinary(255)
DECLARE TB_USER CURSOR FOR
SELECT strAccountID,strPasswd,strPasswdBackup FROM TB_USER
OPEN TB_USER
FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup
 WHILE (@@FETCH_STATUS = 0)
 BEGIN
 
 UPDATE TB_USER SET strPasswdBackup = dbo.CreateHash(@strPasswd) WHERE strAccountID = @strAccountID
 FETCH NEXT FROM TB_USER INTO @strAccountID,@strPasswd,@strPasswdBackup
 END
CLOSE TB_USER
DEALLOCATE TB_USER

Yukarıdaki Kodu Uyguladığımızda Tüm Şifreler Binary Formatında strPasswdBackup a Yazılmış Olduğunu Göreceksiniz, Şimdi Geldik Bunu Normal strPasswd ye Çevirmeye TB_USER Tablomuzdaki strPasswd Alanını Siliyoruz.

Kod:
ALTER TABLE TB_USER DROP COLUMN strPasswd;

Evet strPasswd yide Sildik, Şimdi strPasswdBackup ın Adını strPasswd ye Çevirelim.

Kod:
EXEC sp_rename 'TB_USER.strPasswdBackup', 'strPasswd', 'COLUMN'

İşlemlerimiz Bitti Şimdi Geldik ACCOUNT_LOGIN de Bunu Nasıl Kontrol Edeceğimize ;
ACCOUNT_LOGINI Açtığımız da Şöyle Bir Bölüm Göreceksiniz (Şifreyi Kontrol Eden Kısım) - (Unutmayınızki ACCOUNT_LOGIN den Hariç Bir LOGIN Prosedürünüz Var ise Onada Aynısını Uygulamanız Gerekir.)

Varolan ACCOUNT_LOGIN

Kod:
DECLARE @pwd varchar(13)
 
SET @pwd = null
 
SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID
IF @pwd IS null
BEGIN
 SET @nRet = 0
 RETURN
END
 
ELSE IF @pwd <> @Password
BEGIN
 SET @nRet = 0
 RETURN
END

Yeni Şifre Kontrol Kısmı (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)

Kod:
[COLOR=red]DECLARE @pwd varbinary(255)[/COLOR]
 
SET @pwd = null
 
SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID
 
IF @pwd IS null
BEGIN
 SET @nRet = 0
 RETURN
END
 
[COLOR=red]ELSE IF dbo.CheckHash(@Password,@pwd) <> 1[/COLOR]
BEGIN
 SET @nRet = 0
 RETURN
END

Otomatik Üyelik te Kullanacığınız Örnek Kod(Unutmayınızki ACCOUNT_LOGIN den Hariç Bir LOGIN Prosedürünüz Var ise Onada Aynısını Uygulamanız Gerekir.) - (Değiştirilen Kısımlar Kırmızı Olarak Belirtilmiştir.)

Kod:
-- # Auto Account Start #
SELECT @nRet = Count(strAccountId) FROM TB_USER WHERE strAccountId = @AccountID
IF @nRet = 0
BEGIN
INSERT INTO TB_USER (straccountid, strpasswd, strSocNo, idays) values (@AccountID, dbo.[COLOR=red]CreateHash(@password),[/COLOR] 1, '6')
END
-- # Auto Account End #

Hash Şifre Değişimi İçin Procedure(Normal Şifre Gibi Değiştiremezsiniz.)

Kod:
CREATE PROCEDURE ACCOUNT_PASSWORD_CHANGE
(
@AccountID varchar(50),
@Password varchar(50)
)
AS
/*
Author : AKUMA
*/
BEGIN TRAN
DECLARE @AccountStatus tinyint
SELECT @AccountStatus = COUNT(strAccountID) FROM TB_USER WHERE strAccountID = @AccountID
IF @AccountStatus = 0
BEGIN
PRINT RTRIM(LTRIM(@AccountID)) + ' Adında Bir Hesap Bulunamadı.'
END
ELSE
BEGIN
UPDATE TB_USER SET strPasswd = dbo.CreateHash(@Password) WHERE strAccountID = @AccountID
PRINT RTRIM(LTRIM(@AccountID)) + ' Hesabının Şifresi Değişmiştir.'
END
COMMIT TRAN

Şifre Değişim Proceduresinin Kullanımı
Kod:
Kullanım : [COLOR=blue]EXEC[/COLOR] ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE'
Örnek : [COLOR=#0000ff]EXEC[/COLOR] ACCOUNT_PASSWORD_CHANGE 'HESAPID','ŞİFRE'

Uzman Kullanıcılar İçin Bilgilendirme ;

Şifreleme ;
Kod:
Kullanım : SELECT dbo.CreateHash('ŞİFRE')
Örnek : SELECT dbo.CreateHash('123456')
Şifrenin Doğruluğunu Kontrol Etme ;
Kod:
Kullanım : SELECT dbo.CheckHash('Kontrol Edilecek Açık Şifre','Userın Hash Şifresi')
Örnek : SELECT dbo.CheckHash('123456',0x01008A7CE696AF938542D5BF1BF130CAF820E8BA072F3AA0AB49)
[COLOR=silver]Bu Değer Sonunda 0 Dönerse Şifre Yanlış, 1 Dönerse Şifre Doğru Demektir.[/COLOR]

Cucelator Harici Paylaşımı Kesinlikle Yasaktır.

Kolay Gelsin :)
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Tşkler Gerçekten Büyük Bir Paylaşım
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

İyi teşekkürler..
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Tek kelimeyle Harika, süper, muhteşemsin...
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

mükemmel ^^
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

harikasın saol:)
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Sabit konu için teşekkürler,
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Sabitledim :)
 
Moderatör tarafında düzenlendi:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Saol Akuma CVp için :icon_cry:
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

DECLARE @pwd varbinary(255)

SET @pwd = null

SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID

IF @pwd IS null
BEGIN
SET @nRet = 0
RETURN
END

ELSE IF dbo.CheckHash(@Password,@pwd) = 0
BEGIN
SET @nRet = 0
RETURN
END

olsa n'olur ?
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Ne demeye çalışıyosun cevabını verdim ? öle bişi yapıcak olsam cüceloper olmazdım ?? :icon_twisted::icon_twisted:

Maxis Ben Genel olarak Espiri Yaptım Kişiye Özel Birşey Değil

Üstüne Alınma

Kod:
[COLOR=darkorange][B]DECLARE @pwd varbinary(255)[/B][/COLOR]
 
SET @pwd = null
 
SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID
 
IF @pwd IS null
BEGIN
SET @nRet = 0
RETURN
END
 
[B][COLOR=darkorange]ELSE IF dbo.CheckHash(@Password,@pwd) = 0[/COLOR][/B]
BEGIN
SET @nRet = 0
RETURN
END

Bu Şekilde Olursa Çalışır yine Normal Sorun Çıkarmaz :)
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

w0w qüzel paylasım gerçekten bende sımdı denedım serverımda uyqulamaya geçirdim :)
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Maxis Ben Genelden Bahsettim Sana Değil :)

Üstüne Alınma

Kod:
[COLOR=darkorange][B]DECLARE @pwd varbinary(255)[/B][/COLOR]
 
SET @pwd = null
 
SELECT @pwd = strPasswd FROM TB_USER WHERE strAccountID = @AccountID
 
IF @pwd IS null
BEGIN
SET @nRet = 0
RETURN
END
 
[B][COLOR=darkorange]ELSE IF dbo.CheckHash(@Password,@pwd) = 0[/COLOR][/B]
BEGIN
SET @nRet = 0
RETURN
END

Bu Şekilde Olursa Çalışır yine Normal Sorun Çıkarmaz :)

Anlamadın ;)

nRet = 0 -- başarılı demek onu biliyorm

ELSE IF dbo.CheckHash(@Password,@pwd) = 0
yapmsam ne olur dedim. ;=)
sen aağıdaki gibi yapmışsın
ELSE IF dbo.CheckHash(@Password,@pwd) <> 1
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Anlamadın ;)

nRet = 0 -- başarılı demek onu biliyorm


yapmsam ne olur dedim. ;=)
sen aağıdaki gibi yapmışsın

Ayını İşlemi Yapar Diyorum Bende Sana
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Server: Msg 8116, Level 16, State 1, Procedure CheckHash, Line 8
Argument data type text is invalid for argument 1 of pwdcompare function.

diye hata veriyor ?
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Bilyom şimdi = 0 daha kısa :D:D:D
O yüzden ^^
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Server: Msg 8116, Level 16, State 1, Procedure CheckHash, Line 8
Argument data type text is invalid for argument 1 of pwdcompare function.

diye hata veriyor ?


Düzeltiyorum CREATE FUNCTION yerine ALTER yazmışım Sorry O Functionu Tekrar Al Oluştur Sorun Kalkar.
 
Son düzenleme:
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Eet Onu Dicektım ALterleri Düzelt ^^
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

Eet Onu Dicektım ALterleri Düzelt ^^


Sadece Bir Tane FUNCTION da Yanlışlıkla ALTER yazmıştım Oda Test Ederken ALTER ettim

Diğer ALTERler Doğrudur Şuan Gördüğünüz Düzgündür Merak Etmeyin
 
Cevap: [YILIN PAYLAŞIMI] Hesap Güvenliği, DB Çalındığında Korkulara Son, Mutlaka Oku

şimdiki sorunsuzmu dicem gene hata düzeltmediysen düzetir msiin daha ilk kodda hata
 
Geri
Üst Alt