Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

beyondelayer https://laravel.gen.tr/d/9255-laravel-app-key-nedir-laravel-application-key

Bir uygulama kullanıldıktan sonra şifreleme anahtarının yeniden oluşturulması gerekiyorsa, daha önce eski anahtar kullanılarak şifrelenmiş verilerin yeni şifreleme anahtarı kullanılarak şifresinin çözülemeyeceğini unutmamak önemlidir. Şifreleme anahtarının yeniden oluşturulması önerilmemekle birlikte, bunu yapmanın kesinlikle kritik olmasa da faydalı olduğu bazı senaryolar vardır.

Bu senaryolar ortaya çıktığında, eski verilerin şifresi çözülerek ve yeni şifreleme anahtarı kullanılarak şifreleme yeniden uygulanarak sorunların üstesinden gelinebilir.

böyle yapılabilir bence.

As the final length of the encrypted text is not predictable and is longer than its plain text counterpart, make sure the associated database column is of TEXT type or larger. In addition, since the values are encrypted in the database, you will not be able to query or search encrypted attribute values

Şifrelenmiş metnin nihai uzunluğu tahmin edilemediğinden ve düz metin karşılığından daha uzun olduğundan, ilişkili veritabanı sütununun TEXT türünde veya daha büyük olduğundan emin olun. Ayrıca, değerler veritabanında şifrelendiğinden, şifrelenmiş öznitelik değerlerini sorgulayamaz veya arayamazsınız.

bu yukardaki paragraf sadece Encrypted Casting içinmi geçerli ? yoksa aşagıdaki dökümantasyondaki kod içinde geçerlimi ?

https://laravel.com/docs/10.x/encryption#using-the-encrypter

<?php
 
namespace App\Http\Controllers;
 
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;
 
class DigitalOceanTokenController extends Controller
{
    /**
     * Store a DigitalOcean API token for the user.
     */
    public function store(Request $request): RedirectResponse
    {
        $request->user()->fill([
            'token' => Crypt::encryptString($request->token),
        ])->save();
 
        return redirect('/secrets');
    }
}

    beyondelayer Çok şaşırdım hiç denk gelmemiştim çok güzel bir bilgi, tek kötü yanı sanırım key generate ettiğimizde tüm datayı kaybetmemiz olabilir. Teşekkürler

    aghabalaguluzade App Key (Uygulama anahtarı) Laravel'i yüklediğinizde veya yeni bir proje oluşturduğunuzda rastgele oluşturulan 32 karakterlik bir dizedir. .env dosyasında saklanır. Eğer geliştirme için projenizi yönetmek için git gibi bir sürüm kontrol sistemi kullanıyorsanız, git push çağrısı Laravel projenizin bir kopyasını gideceği yere gönderir, ancak .env dosyanızı içermez. Bu nedenle, eğer birisi git clone kullanarak projenizi klonlarsa, uygulamalarının doğru çalışması için php artisan key:generate komutunu manuel olarak girmeleri gerekecektir.

    git clone kullanma durumu yoksa çalışan bir uygulamada key generate tekrar çalıştırma ihtiyacı neden istiyeyimki yada yedek alma gibi bişiymi ki bu 5 ay sonra dur key generate çalıştırayım felan ?

      yalcin
      https://laravel.gen.tr/d/9255-laravel-app-key-nedir-laravel-application-key

      Uygulamanızı yeni bir sunucuya dağıttığınızda veya bir güvenlik ihlalinden şüphelendiğinizde olduğu gibi, uygulama anahtarınızı düzenli olarak yeniden oluşturmak iyi bir uygulamadır.

      https://laracasts.com/discuss/channels/laravel/purpose-of-key-generation

      S: Do I have to generate a new key?
      C: Nope, but it is a good practice to change them on every few months.

      https://tighten.com/insights/app-key-and-you

      Çoklu Sunucular
      Aynı uygulamayı birden fazla sunucudan sunuyorsanız anahtarı her sunucuda güncellemeniz gerekir.

      Anahtarınızı döndürme
      İyi bir kimlik bilgisi yönetimi stratejisi rotasyonu içermelidir : anahtarların ve şifrelerin düzenli aralıklarla (örneğin her 6 ayda bir) veya belirli durumlarda (örneğin bir çalışanın şirketten ayrılması) değiştirilmesi.

      Neyse ki APP_KEY sadece birkaç şeyi aklınızda tutmanız gerekiyor.

      yalcin tercih etmemek mi

      Bu senaryolar ortaya çıktığında, eski verilerin şifresi çözülerek ve yeni şifreleme anahtarı kullanılarak şifreleme yeniden uygulanarak sorunların üstesinden gelinebilir.

      böyle bir şey diyorlar ama nasıl yapılır fikrim yok.

      yalcin Ben projeyi genelde localde yürütüyorum şuan hep yapım aşamasındayımda localden sunucuya aldığımda yeni key oluşturuyorum. Taşıdıktan sonra yapılabilir belkide.

      evet dökümantasyonda okudum bunu yada buna benzer birşeyi .
      Şimdi 5 bin kullanıcınız var ve bu 5 bin kullanıcınında şirket bilgilerini unvan , adres , vergi numarası vs gibi bilgileri ayrı bir tabloda tuttuğumuzu farzedelim.

      Kullanıcıya bilgileriniz bizimle güvende diyebilmek adına bu bilgileri şifreliycez tabi aynı zamanda bir fatura kesmemiz gerekiyosa veri tabanından çekip bu bilgileride kullanmamız gerekiyor.

      Birinci handikap arama : tabloda arama yapamıyoruz , yani kullanıcının şirket bilgilerinden neyi
      $encrypted = Crypt::encryptString('10hanelivergino'); şeklinde
      şifreleyip veritabanına kaydediyorsak o kolonda arama yapamıyomuşuz

      İkinci handikap: 5 bin kullanıcınında şirket bilgilerini şifreledik ve aylar sonra unutup php artisan key:generate oluşturduk ozaman yen ibir hata kodu sayfasu yapmak lazım abort:1404 cenaze dolayısıyla kapalıyız

      ben şöyle düşünüyorum .bu encryption ile her aklına geleni şifreleyemezsin dökümantasyondaki örnek bile token den verilmiş sanırım bu tarz şeyleri şifrelemek için kullanmak lazım

       public function store(Request $request): RedirectResponse
          {
              $request->user()->fill([
                  'token' => Crypt::encryptString($request->token),
              ])->save();
       
              return redirect('/secrets');
          }

        yanlız ben yanlış analamdıysam
        protected $castsile modelde pasaport_number alanını Encrypt ediyor/tanımlıyor
        çözmek için birşey yapmıyor sanıyorum protected $castssayesinde otomatik olarak çözebiliyor çünkü dökümantastonda

        Encrypting a Value için
        'token' => Crypt::encryptString($request->token),

        Decrypting a Value içinse
        $decrypted = Crypt::decryptString($encryptedValue);

        şeklinde örnekkodverilmiş demekkicast bunu direk kendisi çözüyo yadavideoda adam göstermeye gerek görmemiş de olabilirneyse bence süper bir özellik

          yalcin database yazıldığı yazan şifrelenmiş yazılıyor orada şifrelenmiş saklanıyor. Fakat siz

          
          $employee = Employee::create([
              'name' => 'Paul Atreides',
              'email' => 'paul@arrakis.com', // Data is encrypted before storing
              'phone' => '123-456-7890', // Encrypted before storing
              'address' => 'The Keep 12', // Encrypted before storing
          ]);
          
          echo $employee->email; // Automatically decrypted
          echo $employee->phone; // Automatically decrypted
          echo $employee->address; // Automatically decrypted

          çağırdığınızda

          > echo $employee->email;
          paul@arrakis.com
          > echo $employee->phone;
          123-456-7890
          > echo $employee->address;
          The Keep 12

          deşifrelenmiş geliyor.

          Kaynak - https://laracoding.com/how-to-encrypt-and-decrypt-model-data-using-casts-in-laravel/

          aslında videoda dikkatli bakarsanız 02:18 de gösteriliryor gösteriliyor adam 501 yazıyor pasporta. Sonra database de şifreleniyor. Fakat çağırdığında normal deşifrelenmiş hali geliyor.

          yalcin çözmek için birşey yapmıyor sanıyorum protected $castssayesinde otomatik olarak çözebiliyor

          evet bunu söylemek istedim zaten otomatik yapıyo gidip controllerda bi yerde çözmek için bir fonksiyon felan yazmıyoruz demek istedim .

          Arkadaşlar password gibi bir daha orijinaline ihtiyacınız olmayacak alanları tek taraflı şifreleyip veri tabanında saklayın. Ben bunu alıp ekranda göstereceğim, listeleyeceğim dediğiniz kayıtları şifrelemeyin 🙂 Ben bunu veri tabanında şifreli saklarım ihtiyacım olduğunda decrypt yapar gösteririm gibi bir şey yapmayın. Biri sizin veri tabanınıza girdiğinde ilk yapacağı şey tüm veriyi bir anahtara göre şifrelemek olur ve anahtar için sizden fidye talep eder, siz istediğiniz kadar şifreleyin, veri gittikten sonra ne anlamı var 🙂 Şifrelenmiş alanlarda sorgu da yapamayacaksınız, bu da ayrı bir konu...