[New][Symfony 5.1] Encrypted Session Data via Service Decorator

Salah satu fitur keren pada Symfony Dependency Injection Component adalah Service Decorator. Service Decorator adalah salah satu cara memanipulasi sebuah service, saya sebut salah satu cara karena kita bisa menggunakan pendekatan lain yaitu Compiler Pass. Berbeda dengan Compiler Pass, Service Decorator lebih kepada melakukan override service dan menggantinya dengan class yang baru dengan logic yang sudah dimodifikasi.

Kembali ke pembahasan, Session adalah salah satu elemen penting dalam sebuah aplikasi. Sering kali kita menyimpan data-data credential pada Session seperti User, Role dan lain sebagainya. Melakukan enkripsi pada data-data yang disimpan di Session adalah salah satu cara mengamankan data tersebut. Sayangnya enkripsi session bukanlah proses yang murah. Sebenarnya bukan cuma session sih, tapi semua enkripsi adalah proses yang mahal yang kalau tidak penting-penting amat sebaiknya dihindari. Karena Session termasuk credential data, maka hal tersebut (enkripsi) dapat dimaklumi, namun harus ada mekanisme caching agar proses tersebut tidak menjadi bottle neck pada program.

Pada Symfony 5.1, semua hal tersebut telah dicover, baik itu enkripsi maupun caching data yang telah dienkripsi. Hal ini dapat dilakukan karena Symfony menambahkan class baru yaitu MarshallingSessionHandler yang memungkinkan kita melakukan enkripsi Session serta secara otomatis melakukan caching pada data yang dienkripsi tersebut.

Untuk mengimplemantasikan Encrypted Session, caranya sangat mudah. Kita cukup membuat Service Decorator untuk Session Marshaller sebagai berikut:

Symfony\Component\Cache\Marshaller\SodiumMarshaller:
    decorates: 'session.marshaller'
    arguments:
        - ['%env(file:resolve:SODIUM_DECRYPTION_FILE)%']
        - '@.inner'

Kita dapat menghapus parameter @.inner seperti mention Nicolas Grekas berikut:

That’s great, the service decoration makes this trivial to use. We can even remove the @Symfony\Component\Cache\Marshaller\SodiumMarshaller.innerargument when autowiring is enabled.

Bagaimana tertarik untuk mencobanya? Selamat berekplorasi

Leave a Reply