Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • Yardım
  • Güvenlik ile alakalı bir kaç soru

Merhaba,

Güvenlik ile alakalı birbirinden bağımsız bir kaç soru sormak istiyorum.

Soru 1:

Laravel kod ile alakalı problemleri gösteren bir çıktı verdiğinde hatanın meydana geldiği kod parçacığını gösteriyor. Projeyi yayına aldığımda bu tür hatanın meydana geldiği kod satırlarını göstermesini nasıl engelleyebilirim? Örnek bir alttadır.

ErrorException
Argument 1 passed to Security::hashString() must be of the type array, string given, called in C:\xampp\htdocs\laravel\app\controllers\UyePaneliController.php on line 12 and defined
open: C:\xampp\htdocs\laravel\app\classes\Security.php
<?php
 
class Security {
	
	public static function hashString( array $str, $salt = null ) {
 
 $hashes = Hashes::get();
 
 $customHashedString;
 foreach($str as $key=>$value) {
Soru 2:
Code injection (kod enjeksiyonu) saldırılarını engellemek için yapmam gereken birşey var mıdır yoksa laravel bunu bizim için otomatik olarak sağlar mı? Örneğin formlardan veya URLden gelen verileri veri tabanına kaydederken ve ekrana yazdırırken; veriyi kötü amaçlı kodlardan arındıran bir fonksiyon kullanmak gerekir mi?

Soru 3:
İnternetten yaptığım araştırmaya göre verileri şifrelemeye yarayan (hash ve md5 gibi) bir çok algoritma hacklenmiş. Laravel'in Hash::make() fonksiyonu ne kadar güvenlidir? Bunu kullanmak yeterli midir?

Soru 4:
Hash benzeri şifreleme algoritması sağlayan kendimize ait bir fonksiyon geliştirsek bu fonksiyonu korumak için FTP serverı korumamız gerekir. Örneğin, kullanıcı şifresini "1234" yazdığında bunu "fg%RuN+drdV6jaC3" gibi bir stringe çeviren ve bu stringi geri çözebilecek bir fonksiyonu nasıl koruyabiliriz? FTP ve Database serverlerını ayrı ayrı makinelerde bulundurmak ve bunlara sadece belirli ip'den girilmesini nasıl sağlayabiliriz? Ayrıca sadece belirli ip'den giriş sağlama izni verilmesi güvenlik için yeterli olur mu? Bunun haricinde alınması gereken başka önlemler var mıdır?

Bu soruların cevapları umarım ki benim gibi birçok insana faydalı olacaktır. Bunlar haricinde alınabilecek önlemler varsa tecrübeli arkadaşların bizimle paylaşmasını rica ederim. Şimdiden teşekkürler.
Merhaba, senior biri değilim ama yine de bildiklerimi yazmak istiyorum.

1) Laravel'in app/config/app.php dosyasında 'debug' => true, diye bir ayar mevcut. Bunu 'debug' => false, yaparsanız hatalar ekranda görünmeyecektir. Ayrıca, App:error, App:fatal gibi denetçileri de kullanabilirsiniz. Mesela bir fatal error oluştuğunda App:fatal fonksiyonunun içinde ne varsa o icra olacaktır. Detaylı bilgi: http://laravel.com/docs/errors

2) Bildiğim kadarıyla Blade ile oluşturduğunuz formlarda zaten bir token olacak, kısmen bir güvenlik sağlıyor. Ayrıca Laravel, veri tabanına kayıt yaparken, prepared statements kullanıldığı için sql injection olacağını sanmıyorum. Detaylı bilgi: http://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

3) Laravel'in Hash fonksiyonu ne kadar güvenli olduğunu bende merak ediyorum. Yine de yanlış anlamadıysam, zamana bağlı olarak şifreleme yaptığı için güvenilirdir diye umuyorum.

4) Stringi geri çevirmek zaten bir şifreleme algoritmasında bence olmaması gereken birşey. Daha doğrusu algoritmanın tek yönlü olması onu daha güçlü yapacaktır diye düşünüyorum. Bu arada, muhtemelen yazacağınız algoritma, Laravel'in kullandığı algoritmadan daha güçlü olmayacaktır. Bunu size özel olarak söylemiyorum. Sonuçta biz şifreci değiliz. Yazılımcı olarak görevimiz şifre algoritması yazmak değil bence. Onu şifreciler yapsın, biz de kullanalım.
md5 kırıldığını kim söylemiş? md5 genelde dosya doğrulama kimliği üretmek için kullanılır. Sonuçta 32 karakterlik bir bilgi döndürür. 32 karakterlik bilgiyi kullanarak kos koca dosyaynın içindekileri nasıl elde edecekler.? Bilindik basit şifrelerin md5 leri bellidir. Bu bütün şifreleme algoritmaları için geçerlidir. Eğer bilgileriniz sizin için çok önemliyse sunucunuzun bizzat evinizde,işyerinizde sizin elinizde ve dentiminzde olması gerekir. Amerikadaki yada Türkiyedeki her hangi bir sunucda ne yaparsan yap hiç bir biçimde verilerin güvende olmaz.
Roni yazdımd5 kırıldığını kim söylemiş? md5 genelde dosya doğrulama kimliği üretmek için kullanılır. Sonuçta 32 karakterlik bir bilgi döndürür. 32 karakterlik bilgiyi kullanarak kos koca dosyaynın içindekileri nasıl elde edecekler.? Bilindik basit şifrelerin md5 leri bellidir. Bu bütün şifreleme algoritmaları için geçerlidir. Eğer bilgileriniz sizin için çok önemliyse sunucunuzun bizzat evinizde,işyerinizde sizin elinizde ve dentiminzde olması gerekir. Amerikadaki yada Türkiyedeki her hangi bir sunucda ne yaparsan yap hiç bir biçimde verilerin güvende olmaz.
md5 sağlam bir şifreleme algoritması değil. Burada sorun md5'in kırılması değil, aynı md5'e sahip başka md5'ler bulunması. Orta düzey bir bilgisayar yaklaşık 2 saatte aynı md5'i üretebilecek başka bir string bulabiliyor.

Örneğin: 'şifre123456' kelimesi '30karakterlimd5' md5'ini döndürüyorsa, '30karakterlimd5' md5'ini döndürecek başka stringler bulunuyor. Sıkıntıda burada başlıyor. Aslında kullanıcının şifresi farklı oluyor ama md5ler aynı olacağı için farklı bir şifre ile giriş yapılabiliyor. md5 yerine daha sağlam algoritmaların kullanılması bu yüzden tavsiye ediliyor. Artık md5'in herhangi bir etkisi kalmadı şifreleme konusunda.

Sunucunun senin evinde olmasının hiçbir önemi yok. Sonuçta sunucu internet üzerinden erişilebilir olacaksa birileri bir şekilde işletim sistemine sızmayı başarır ne var ne yok upload edebilir. Sunucunun başına eli silahlı bekçi de diksen fayda etmez. Ancak geliştireceğin uygulama intranet üzerinde çalışacaksa sorun olmaz, ancak bu durumda zaten istesen de başka yerdeki sunucuları kullanamazsın.

Hosting firmaları nasıl çalışıyor bilmiyorum, ama birisinin senin sunucundaki verileri fiziksel yolla alması demek (data centera giriş yapan bir personelin verileri cdye aktarması gibi) çok büyük hukuki sorumluluklar doğurabilir. Kimsenin böyle bir riske gireceğini sanmıyorum.

Ayrıca bu olay sadece hosting ile bitmiyor. Eğer FTP kullanıyorsan dosyaların upload edilirken başkaları tarafından çalınabilir. Bu yüzden daima güvenlik protokoller üzerinden çalışmanız gerekir. (SFTP, SSH, SSL vb.)

Birde intranet üzerinde veri tutmak ne kadar kulağa hoş gelse de son derece zahmetli bir iş. Blizzard gibi büyük firmalar kaynak kodları intranet sunucularda tutmak için çok büyük paralar harcıyorlar. Örneğin Blizzard sırf version control/issue tracking sistemi olan Github Enterprise'i intranette çalıştırmak için yılda 400.000 dolar ödüyor Github firmasına.
Arkadaşlar cevaplar için hepinize teşekkürler. Ancak md5 ve benzeri algoritmalar kırılabiliyor. Bir bilgisayar mühendisi olarak üniversitede güvenlik ile alakalı eğitim almadık. Dolayısı ile bilmediğimiz konular var ve kendimizi bu konularda geliştirmemiz, değişikliklere ayak uydurmamız gerekiyor. Şu an kendi firmam için bir e-ticaret projesi geliştiriyorum. E-ticarette yaşanan sipariş sahtekarlıklarının önüne geçebilmek için kredi kartı numarasını veritabanına kayıt etmem ve sonraki alışverişlerde bu numarayı sahtekarlık filtresinden geçirmem gerekiyor. Gerçi her ne kadar son kullanma tarihi ve cvv noyu kayıt etmeyecek olsam da yine de tüm güvenlik önlemlerini almam gerekiyor.

Veritabanını ayrı bir sunucuda tutup, bu sunucuya sadece tek bir IPden erişime izin vereceğim. Bunun haricinde yine de her ihtimale karşı veri hırsızlarını engellemek için veritabanındaki bilgileri şifrelemem gerekiyor. Bunun için kendi fonksiyonumu yazıp girilen bilgiyi 60 karakterli bir stringe dönüştüren ve daha sonra bu stringi laravel ile hash etmeyi düşünüyorum.

Proje için zaten kendi sunucumuzu satın alacağız.

Bilgiler için hepinize teşekkürler, ancak yine de tavsiyesi olan olursa uygulayacağım. Benim için ve benim gibi birçok insan için bu konu çok önemli.
Şifreleme ile hashingi ayrı tutmak gerekiyor.

Hashing doğası itibari ile farklı iki stringin aynı sonucu verebileceği durumu vardır.Geri döndürülemez. Ancak MD5 databaselerde karşılaştırma yaparak sonuçlar bulunabiliyor. O yüzdende bir kullancıyı sisteme dahil ederken zor şifre seçmesi istenir. Büyük küçük harf rakkam ve özel karakter bulunması gibi. Böylece tahmin edilebilirlik güçleşir.

Laravelde password_hash fonksiyonu kullanılıyor. en temel özelliği aynı değer için farklı sonuç döndürmesi. Bu da md5 gibi algoritmalar için oluşturulan veritabanlarını işlevsiz kılıyor.

Şifreleme AES algoritmalarını incelemeni öneririm. anahtar değeri çaldırmadığın sürece kırılması oldukça güç algoritmalar.

Bunun yanında kredi kartı bilgilerini saklayacaksanız PCI uyumluluğu sertifikası almanız zorunluluk. Bunu online yapan toollar var. Ben şahsen COMODO tercih ediyorum. Türkiye ofisi var ve gayet yardımcı oluyorlar.
Aristona yazdı
Roni yazdımd5 kırıldığını kim söylemiş? md5 genelde dosya doğrulama kimliği üretmek için kullanılır. Sonuçta 32 karakterlik bir bilgi döndürür. 32 karakterlik bilgiyi kullanarak kos koca dosyaynın içindekileri nasıl elde edecekler.? Bilindik basit şifrelerin md5 leri bellidir. Bu bütün şifreleme algoritmaları için geçerlidir. Eğer bilgileriniz sizin için çok önemliyse sunucunuzun bizzat evinizde,işyerinizde sizin elinizde ve dentiminzde olması gerekir. Amerikadaki yada Türkiyedeki her hangi bir sunucda ne yaparsan yap hiç bir biçimde verilerin güvende olmaz.
md5 sağlam bir şifreleme algoritması değil. Burada sorun md5'in kırılması değil, aynı md5'e sahip başka md5'ler bulunması. Orta düzey bir bilgisayar yaklaşık 2 saatte aynı md5'i üretebilecek başka bir string bulabiliyor.

Örneğin: 'şifre123456' kelimesi '30karakterlimd5' md5'ini döndürüyorsa, '30karakterlimd5' md5'ini döndürecek başka stringler bulunuyor. Sıkıntıda burada başlıyor. Aslında kullanıcının şifresi farklı oluyor ama md5ler aynı olacağı için farklı bir şifre ile giriş yapılabiliyor. md5 yerine daha sağlam algoritmaların kullanılması bu yüzden tavsiye ediliyor. Artık md5'in herhangi bir etkisi kalmadı şifreleme konusunda.

Sunucunun senin evinde olmasının hiçbir önemi yok. Sonuçta sunucu internet üzerinden erişilebilir olacaksa birileri bir şekilde işletim sistemine sızmayı başarır ne var ne yok upload edebilir. Sunucunun başına eli silahlı bekçi de diksen fayda etmez. Ancak geliştireceğin uygulama intranet üzerinde çalışacaksa sorun olmaz, ancak bu durumda zaten istesen de başka yerdeki sunucuları kullanamazsın.

Hosting firmaları nasıl çalışıyor bilmiyorum, ama birisinin senin sunucundaki verileri fiziksel yolla alması demek (data centera giriş yapan bir personelin verileri cdye aktarması gibi) çok büyük hukuki sorumluluklar doğurabilir. Kimsenin böyle bir riske gireceğini sanmıyorum.

Ayrıca bu olay sadece hosting ile bitmiyor. Eğer FTP kullanıyorsan dosyaların upload edilirken başkaları tarafından çalınabilir. Bu yüzden daima güvenlik protokoller üzerinden çalışmanız gerekir. (SFTP, SSH, SSL vb.)

Birde intranet üzerinde veri tutmak ne kadar kulağa hoş gelse de son derece zahmetli bir iş. Blizzard gibi büyük firmalar kaynak kodları intranet sunucularda tutmak için çok büyük paralar harcıyorlar. Örneğin Blizzard sırf version control/issue tracking sistemi olan Github Enterprise'i intranette çalıştırmak için yılda 400.000 dolar ödüyor Github firmasına.
Farklı karakterlerin aynı md5 vermesi çok ilginç ? ilk defa okuyorum. Örnek varmı ? (MD5 aynı olsa bile siz üyeyi sadece tek şifre sorgulaması ile içeri almıyorsunuz ki? Kaldı ki birden fazla kişi benzer şifre kullanabilir)
Sunucu elimizde iken güvenli değilse, elimizde olmadığında nasıl güvende olacak? Gerekli güvenlik önlemlerini aldıktan sonra, uzaktaki bir sunucdan daha güvenlidir. En azından bilgiler sizin gözetiminizde olur. (Hosting firmalarına çok güvenmemek lazım. Geçmişte veri hırsızlığı ile ilgili çok örnek var, internette araştırsanız bulursunuz)
Roni yazdı
Aristona yazdı
Roni yazdımd5 kırıldığını kim söylemiş? md5 genelde dosya doğrulama kimliği üretmek için kullanılır. Sonuçta 32 karakterlik bir bilgi döndürür. 32 karakterlik bilgiyi kullanarak kos koca dosyaynın içindekileri nasıl elde edecekler.? Bilindik basit şifrelerin md5 leri bellidir. Bu bütün şifreleme algoritmaları için geçerlidir. Eğer bilgileriniz sizin için çok önemliyse sunucunuzun bizzat evinizde,işyerinizde sizin elinizde ve dentiminzde olması gerekir. Amerikadaki yada Türkiyedeki her hangi bir sunucda ne yaparsan yap hiç bir biçimde verilerin güvende olmaz.
md5 sağlam bir şifreleme algoritması değil. Burada sorun md5'in kırılması değil, aynı md5'e sahip başka md5'ler bulunması. Orta düzey bir bilgisayar yaklaşık 2 saatte aynı md5'i üretebilecek başka bir string bulabiliyor.

Örneğin: 'şifre123456' kelimesi '30karakterlimd5' md5'ini döndürüyorsa, '30karakterlimd5' md5'ini döndürecek başka stringler bulunuyor. Sıkıntıda burada başlıyor. Aslında kullanıcının şifresi farklı oluyor ama md5ler aynı olacağı için farklı bir şifre ile giriş yapılabiliyor. md5 yerine daha sağlam algoritmaların kullanılması bu yüzden tavsiye ediliyor. Artık md5'in herhangi bir etkisi kalmadı şifreleme konusunda.

Sunucunun senin evinde olmasının hiçbir önemi yok. Sonuçta sunucu internet üzerinden erişilebilir olacaksa birileri bir şekilde işletim sistemine sızmayı başarır ne var ne yok upload edebilir. Sunucunun başına eli silahlı bekçi de diksen fayda etmez. Ancak geliştireceğin uygulama intranet üzerinde çalışacaksa sorun olmaz, ancak bu durumda zaten istesen de başka yerdeki sunucuları kullanamazsın.

Hosting firmaları nasıl çalışıyor bilmiyorum, ama birisinin senin sunucundaki verileri fiziksel yolla alması demek (data centera giriş yapan bir personelin verileri cdye aktarması gibi) çok büyük hukuki sorumluluklar doğurabilir. Kimsenin böyle bir riske gireceğini sanmıyorum.

Ayrıca bu olay sadece hosting ile bitmiyor. Eğer FTP kullanıyorsan dosyaların upload edilirken başkaları tarafından çalınabilir. Bu yüzden daima güvenlik protokoller üzerinden çalışmanız gerekir. (SFTP, SSH, SSL vb.)

Birde intranet üzerinde veri tutmak ne kadar kulağa hoş gelse de son derece zahmetli bir iş. Blizzard gibi büyük firmalar kaynak kodları intranet sunucularda tutmak için çok büyük paralar harcıyorlar. Örneğin Blizzard sırf version control/issue tracking sistemi olan Github Enterprise'i intranette çalıştırmak için yılda 400.000 dolar ödüyor Github firmasına.
Farklı karakterlerin aynı md5 vermesi çok ilginç ? ilk defa okuyorum. Örnek varmı ? (MD5 aynı olsa bile siz üyeyi sadece tek şifre sorgulaması ile içeri almıyorsunuz ki? Kaldı ki birden fazla kişi benzer şifre kullanabilir)
Sunucu elimizde iken güvenli değilse, elimizde olmadığında nasıl güvende olacak? Gerekli güvenlik önlemlerini aldıktan sonra, uzaktaki bir sunucdan daha güvenlidir. En azından bilgiler sizin gözetiminizde olur. (Hosting firmalarına çok güvenmemek lazım. Geçmişte veri hırsızlığı ile ilgili çok örnek var, internette araştırsanız bulursunuz)
Nasıl gözetmeyi düşünüyorsun? İnternet kablosunun başına bekçi mi koyacaksın? Daha birkaç gün önce openssl'de heartbleed açığı çıktı. Daha öncesinde birçok açık çıktı, benim hatırladığım dav açığı var mesela. Güncelledinmi sunucunu? Hosting firmalarının tamamı bu tür açıkları takip edip önlem alıyorlar. Senin gözetiminde olsa ne olacak? Saldırılar fiziksel yollardan yapılmıyorki, dijital yollardan yapılıyor. Sunucun internetten erişilebilir olduğu anda hackerların hedefi olur. İstersen sunucuyu yeri 7 kat altında sakla.

Hangi firma bunlar? Natro, Linode, DigitalOcean gibi büyük şirketlerin böyle bir hırsızlığa bulaşması sonları olur. Hem dava üstüne dava ile uğraşırlar hemde isimleri lekelendiği için kimse onları kullanmaz. O adamların sunucularına da elini kolunu sallayarak giremezsin. Birisinin gidip senin verilerini fizilsel yoldan çalması son derece ütopik bir düşünce.

md5 konusunda biraz internette araştırma yapabilirsin. Why md5 sucks diye arattır mesela.
Amerika bütün dünyayı izliyor suç olmuyor da hostinglerdeki verilerin çalınmasımı suç oluyor. Çalınan verilerin çalındığını size söyleceklerini mi zanediyorsunuz. Günümüzde her tür veri çok değerlidir. Bu veriler elde edilirken insanların bundan haberdar olması ancak bir skandalla yada iç çelişkilerle alevlenen kavgalarla ortaya çıkabiliyor. Güçlü ve ucuz sunucuların çoğu boşuna Amerikada, Kanadada ve Avrupada bulunmuyor. Ayrıca en güçlü internet şirketleride yine Amerikan kökenli. Dünyadaki olup biten her şeyden bilgi alıp kullanıyorlar.
Benim demek istediğim şey şu, güvenlik önlemlerinizi aldığınız taktirde kendi sunucunuzda verileriniz daha güvenli olur. Amerikdaki sunucunun güvenliği ne ise sizde buna aynen uyarsınız ve verilerinizi güvende tutabilirsiniz. Fiziksel bir erişimden bahsetmedim ben.
Eğer sırdan bilgilerle uğraşıyorsanız kendiniz için bir sunucu bulundurmanıza gerek yok. Çünkü çok masraflı.
Roni yazdıAmerika bütün dünyayı izliyor suç olmuyor da hostinglerdeki verilerin çalınmasımı suç oluyor. Çalınan verilerin çalındığını size söyleceklerini mi zanediyorsunuz. Günümüzde her tür veri çok değerlidir. Bu veriler elde edilirken insanların bundan haberdar olması ancak bir skandalla yada iç çelişkilerle alevlenen kavgalarla ortaya çıkabiliyor. Güçlü ve ucuz sunucuların çoğu boşuna Amerikada, Kanadada ve Avrupada bulunmuyor. Ayrıca en güçlü internet şirketleride yine Amerikan kökenli. Dünyadaki olup biten her şeyden bilgi alıp kullanıyorlar.
Benim demek istediğim şey şu, güvenlik önlemlerinizi aldığınız taktirde kendi sunucunuzda verileriniz daha güvenli olur. Amerikdaki sunucunun güvenliği ne ise sizde buna aynen uyarsınız ve verilerinizi güvende tutabilirsiniz. Fiziksel bir erişimden bahsetmedim ben.
Eğer sırdan bilgilerle uğraşıyorsanız kendiniz için bir sunucu bulundurmanıza gerek yok. Çünkü çok masraflı.
@Aristona ile aynı şeyi söylüyor. Bilgilerini biri çalmak istese fiziksel yolla neden yapsın sunucunu sunucundaki açıklar vesilesiyle veri hırsızlığı olur. Zaten o kadar önemli bir sitenin verilerini evindeki sunucunda saklamak mantıksız geldi. Bu sunucu için soğutma temizlik ve en önemlisi internet hız ve upload. Yanlış hatırlamıyorsam yeni internet yasasıyla birlikte logları 2 yıl saklaman gerek buda ekstra server demek. Bence sunucular kaliteli firmalarda saklanmalı.
Sunucunuz nerde olursa olsun, açık protokolleri kullandığınız sürece sunucuya gelen giden veriye erişilme riski vardır. Bunun önüne geçmek için güvenli katmanlar kullanmak gerekli. Web için https, ftp için ftps , sftp gibi (illaki para vermenize gerek yok kendinizde ssl için sertifika üretebilirsiniz).

Sunucunuzun kendisine sızılmaması gerekir bunun için açık portların tamamının denetlenmesi ve yazılımlarının güncel tutulması gerekli. @aristona'nın belirttiği heartbleed örneği güzel bir örnek. Ondan önce cPanel repolarına sızmışlardı örneğin. (Bilmeyenler için cPanel/WHM linux hosting yönetim yazılımıdır. Öyle küçükte bir firma değildir.)

Veritabanınızı ne kadar korursanız koruyun önemli verileri şifreleyin (kredi kartı bilgileri, tckimlik bilgileri) gibi, kontrol için kullanacağınız verileri hashleyin (md5 artık güvenirliğini yitirmiştir.)

Topladığınız her veriyi bir süzgeçten geçirin. sessiondan aldığınız datayı bile uygunluk kontrolünden geçirin. Performans olayını kodla yapmaya çalışmaktan vazgeçip önbellekleme modellerinden birine yönelin.

Sunucu şifrelerinin tamamnını sürekli değiştirin. veritabanına illa dışardan erişecekseniz portları değiştirin.
@xsearch kart ve tc kimlik gibi bilgileri hashlemekte sıkıntı yok ama veritabanından arama yaparken nasıl olacak ?
yani artık normal text olmayacağı için geri bilgi kontrolü nasıl sağlanabilir ?

düz mantıkta; arayacağımız veriyi de hashleyip arayabiliriz ama bi "mysql like" sorgusu çalıştırılamaz gibi geliyor.
siz nasıl çalıştırıyorsunuz ?
@makseli hash değil şifreleme kullanılmalı dedim.

Hash : kontrol amaçlı kullanılır ve geri döndürülemez. örneğin : girilen değerin mod 5 i olarak hash algoritmamız var, bu durumda her 5 değer aynı sonucu döndürecektir. Ben 8 değeride girsem 13 değeri de girsem bunun hashi 3 olacaktır. yani benim gerçekte hangi değeri girdiğimi bilme şansınız çok düşük. çünkü 546464468 hash değeride 3 olacaktır. md5 bunu çok daha karışık yapıyor. denk gelme olasılığı atıyorum katrilyonda 1 böylede olsa denk gelme olasılığı var.

Şifreleme : geri döndürülebilir şekilde veriyi karıştırmak demektir. Mesela en basitinden girilen veriyi tersine çevirmek. Bu şifreleme algoritmaları yine md5'te olduğu gibi bunu daha karmaşık yapıyorlar. karıştırmak için bir anahtar değer kullanıyorlar. Laravel configurasyonundaki 'key' değeri bunun içindir. Temel şifreleme metodlarından bir tanesi veriyi xor operatorunden geçirmek. Bit veri için aşağıdaki tablodaki gibi bir çevrim yapar.
1 1 0
1 0 1 
0 1 1
0 0 0
Şimdi bunu nasıl kullanıyor şifreleme algoritmaları
şifrelenecek değer : a olsun
anahtar : b olsun

a nın bit karşılığı : 01100001
b nin bit karşılığı : 01100010
------------------------------------
x or operatörü ile : 00000011

yukardaki bit değeri text karaktere denk gelmedi gelmek zorunda da değil. şu an şifreledik bu veriyi. şifrelenmiş veriyi bulmak için işlemi tersine çeviriyoruz :

x or operatörü ile : 00000011
b nin bit karşılığı : 01100010
------------------------------------
: 01100001

burda şifrelenmiş veriyi geri çevirmek için anahtara sahip olmak gerekir.

şimdi bir sonraki adım uzun keyler ne işe yarıyor :
mesela keyimiz : V??ederf4%%6rftgfdy66456 gbi bişi olsun
biz metin için : aaaaaaaaaaaaaaaaaaaaaa değerini kullansak bile metnimizin her bytesi için ayrı sonuç dönecektir.
birde metne : 'aaaaaaaaaaaaaaaaaaaaaa_'.strtotime(); yaparsak aynı değer girilse bile farklı sonuçlar dönecektir. temiz metni aynı şekilde elde edip sonradan eklediğimizi çıkartarak temiz metne erişiriz. girilen metni ters çevirme işlemi vs. gibi geri döndürülebilir fonksiyonlara sokabilirsiniz. en sevdiğim aralara karakter sokmak :)))
inceleyebileceğiniz küçük bir algoritma

http://resulaslan.com/work/sifrele.php

http://www.resulaslan.com/sifrele.php?yazi=TesTere şeklinde test edilebilir :)))
<hr>
<form method="post" action="sifrele.php">
 <textarea name="sifreli" cols="100" rows="4"></textarea> <br>
 <input type="submit">
</form>
<?php
 function sifrele($text,$key) {
	$text = base64_encode(md5(uniqid('',true))."_".strrev($text)); 

 

 $outText = '';

 // Iterate through each character
 for($i=0;$i<strlen($text);$i++)
 {
 $outText .= $text{$i} ^ $key{$i % strlen($key)};

 } 
 return base64_encode($outText);
}

function sifrecoz($string,$key) {

 // Our plaintext/ciphertext
 $text =base64_decode($string);

 // Our output text
 $outText = '';

 // Iterate through each character
 for($i=0;$i<strlen($text);$i++)
 {
 $outText .= $text{$i} ^ $key{$i % strlen($key)};

 } 
 
 $outText = base64_decode($outText); 

 list($zaman,$domain_reverse,$key_md5,$zaman2) = explode("_",$outText);
 
 
 return strrev($domain_reverse);
}
$key = "fe5c095a031020d1fd38d10085b2db13"; $metin = $_GET["yazi"] ? $_GET["yazi"]:"Resul ASLAN";


 $sifreli = sifrele($metin,$key);

$sifreli = $_POST["sifreli"]?$_POST["sifreli"]:$sifreli;
echo "Şifreli Metin:<br>";
echo $sifreli;
echo "<hr> Temiz Metin<br>"; 
echo sifrecoz($sifreli,$key);





?>
Arama konusunda gelince kart ve tc kimlik için like kullanmayıver tam değer girmiyorsa manasıda yok zaten şifrele karşılaştır geç. çünkü bir kart bilgisini çaldırmakla, like sorgu yapamamak arasında kalmak. Benim tercihim kart bilgisini korumak olur bu örnekte.
@xsearch cevap için teşekkürler. Hash derken şifreleme aklımdan geçiyordu

kart ve tc gibi bilgiler likle ile aranıp bulunmaması lazım, haklısınız.

şifreleme ile ilgili L4 te çalışan bir paket biliyor musunuz ?
teşekkürler,

ara ara kullandığım sözü tekrarlayım

"laravel i kullanırken zengin bebesi gibi hissediyorum :D"
bunu sadece laravele atfetmek azcucuk diğer çatılara acımasızlık olur. Özellikle laravel çekirdeğinin bir bölümünün symfony den geldiğini düşünürsek
yii ve ci kullandım daha önce. laravel de ek paketler kadar yii da görmemiştim.
gerçi hepsinin kendine göre artıları var da denebilir. ya da ben, şimdikinden daha toydum
ilk versiyonlar genellikle öyledir.
laravel şu an 4. versiyonda ci geliştirmeyi durdurmasa belki şimdiye kadar daha iyi olurdu. Ancak cakePHP , Zend , symfony bu konuda gayet iyilerdi. Hatta CI kütüpanesi olarak Zend bileşenlerinin kullanıldığınıda görmüştüm.