Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Yöneticiye kod çalıştırma yetkisi vermeden, e-posta şablonlarını düzenleme izni verme.
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Yöneticiye kod çalıştırma yetkisi vermeden, e-posta şablonlarını düzenleme izni verme.

Yazılım

Yöneticiye kod çalıştırma yetkisi vermeden, e-posta şablonlarını düzenleme izni verme.

teknomers
Son güncelleme: 9 Haziran 2026 19:22
teknomers
Paylaş
Paylaş

LaraFoundry, yeniden kullanılabilir bir Laravel SaaS çekirdeği olarak kamuya açık bir şekilde inşa ediliyor. Mevcut bir CRM’den çıkarıldı ve aşama aşama gönderiliyor. Bu gönderi, ayar depolama, profil merkezi ve veritabanı destekli bir e-posta şablon editörü olmak üzere üç hizmet modülü içeren 5.1 aşamasıdır. E-posta editörü, ilginç güvenlik hikayesi nedeniyle bu makalenin çoğunu kapsamaktadır.

<h2>
    <a name="what-shipped-in-phase-51" href="#what-shipped-in-phase-51"></a>
    5.1 aşamasında gönderilenler
</h2>

<p>Her biri kendi gözden geçirme süreci olan üç parça:</p>

<ul>
    <li>Ayarlar: bir yapılandırma kaydı tarafından yönlendirilen, üç kapsamlı (uygulama, şirket, kullanıcı) genel anahtar-değer deposu.</li>
    <li>Profil merkezi: ad ve e-posta, şifre, iki faktörlü kimlik doğrulama, PIN, oturumlar, avatar ve UI tercihleri için tek bir sekmeli sayfa.</li>
    <li>E-posta şablonları: her dil için temel e-postaların konu ve HTML gövdesi için süper-yönetici editörü, veritabanında saklanmaktadır.</li>
</ul>

<h2>
    <a name="the-email-template-editor-and-why-rendering-is-the-scary-part" href="#the-email-template-editor-and-why-rendering-is-the-scary-part"></a>
    E-posta şablon editörü ve render işleminin neden korkutucu olduğu
</h2>

<p>Özellik sıradan: Bir operatörün onay e-postasının, şifre sıfırlama e-postasının, hoş geldin mesajının ve şirket davetinin metnini, her desteklenen dilde, bir dağıtım olmadan değiştirmesine izin verir. Bunu bir tabloda saklar, yönetim konsolunda düzenler.</p>

<p>Tehlike, nasıl render edildiğindedir. Tembel versiyon, saklanan dizeyi Blade veya başka bir ifade motoru aracılığıyla geçirmek olur, böylece <code>{{ $user->name }}</code> çalışır. Bunu yaptığınız an, bir yönetici tarafından oluşturulan bir dize çalıştırılabilir hale gelir. Yönetim oturumuna sahip olan herkes, veya bir şekilde oturumunu ele geçiren biri, uzaktan kod çalıştırmaya ulaşabilir. Sunucu tarafı şablon enjeksiyonu tam olarak bu hatayı ifade eder.</p>

<p>Bu nedenle, render edici Blade kullanmaz ve <code>eval</code> kullanmaz. Tek bir geçiş ile <code>{{name}}</code> token'ları üzerinde işler ve başka bir şey yok:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="k">public</span> <span class="k">function</span> <span class="n">render</span><span class="p">(</span><span class="kt">string</span> <span class="nv">$template</span><span class="p">,</span> <span class="kt">array</span> <span class="nv">$data</span><span class="p">,</span> <span class="kt">bool</span> <span class="nv">$keepUnknown</span> <span class="o">=</span> <span class="kc">false</span><span class="p">):</span> <span class="kt">string</span>

{
return (string) preg_replace_callback(
‘/{{\s(\w+)\s}}/’,
function (array $matches) use ($data, $keepUnknown) {
$key = $matches[1];

        <span class="k">if</span> <span class="p">(</span><span class="nb">array_key_exists</span><span class="p">(</span><span class="nv">$key</span><span class="p">,</span> <span class="nv">$data</span><span class="p">))</span> <span class="p">{</span>
            <span class="k">return</span> <span class="p">(</span><span class="n">string</span><span class="p">)</span> <span class="nv">$data</span><span class="p">[</span><span class="nv">$key</span><span class="p">];</span>
        <span class="p">}</span>

        <span class="k">return</span> <span class="nv">$keepUnknown</span> <span class="o">?</span> <span class="nv">$matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">:</span> <span class="s1">''</span><span class="p">;</span>
    <span class="p">},</span>
    <span class="nv">$template</span><span class="p">,</span>
<span class="p">);</span>

}

Fullscreen moduna geç
Fullscreen modundan çık

<p>Buradan bazı önemli özellikler ortaya çıkmaktadır:</p>

<p>Değiştirme işlemi tek bir geçiş ile gerçekleşir. Değiştirme değeri asla yeniden taranmaz, dolayısıyla bir veri parçası <code>{{something}}</code> içeriyorsa, bu ikinci bir değiştirme turuna neden olamaz. Hiyerarşik genişlemelere neden olabilecek durumlar yaşanmaz.</p>

<p>Saklanan dize asla bir ifade motoruna ulaşmaz. Derleme aşaması yoktur, <code>eval</code> yoktur, Blade yoktur. Veritabanındaki bir şablon, yapısı gereği kod çalıştırma yeteneğine sahip değildir; bu durum bir kara liste aracılığıyla değil, yapılandırma ile sağlanmıştır.</p>

<p>Bilinmeyen token'lar varsayılan olarak temizlenir, böylece bir alıcı, gelen kutusuna hiçbir şekilde ham <code>{{token}}</code> görmez. Önizleme süreci <code>keepUnknown</code> geçirir, bu nedenle bir operatör hala neyin bağlı olduğunu görebilir.</p>

<p>O render edici, birincil güvenlik sınırıdır. Diğer her şey, derinlikte savunmayı teşkil eder:</p>

<p>Katı değişken beyaz listesi. Her şablon, kullanmasına izin verilen değişkenleri açıkça belirtir. Kaydetme sırasında, konu ve gövdeye başvuran her <code>{{variable}}</code> belirli dillerdeki beyaz liste ile kontrol edilir. Beyaz listelerde belirtilmemiş bir şeye başvurursanız, gönderim zamanında sessiz bir sürpriz yerine 422 alırsınız.</p>

<p>HTML sanitizasyonu. Gövde, yazma ve önizleme sırasında, e-posta dostu bir izin listesi ile HTMLPurifier'dan geçirilir (tablolar, satır içi stiller ve e-postanın gerçekten ihtiyaç duyduğu şeyler). Betikler, olay işleyicileri ve <code>javascript:</code> URL'leri kaldırılır. Bu, bir çerçeve sarmalayıcısının büyük sürümlerinden etkilenmemesi için doğrudan arındırıcı üzerinde inşa edilmiştir.</p>

<p>Sandıklenmiş önizleme. Canlı önizleme, <code>sandbox</code> ile bir iframe içinde render edilir ve betikler kapalıdır, bu nedenle önizleme yüzeyi bile ikinci bir bağımsız engel oluşturur, tek başına değil.</p>

<p>Tehdit modeli, aktörün kim olduğuyla dürüst olur. Süper-yönetici güvenilir bir operatördür, düşmanca bir son kullanıcı değildir. Kod çalıştırmayacak bir render edici, gerçek savunmadır; arındırma ve sandbox, bir hesap ele geçirildiğinde veya hatalı bir biçimlendirilmiş kod yapıştırıldığında kalan durumlar içindir. İnşa etmeden önce tehdit modelini yazdım, böylece katmanların var olma sebebi vardı; bu, güvenlik gösterisi yerine gerçek bir güvenlikti.</p>

<h2>
    <a name="a-generic-settings-store-with-three-scopes" href="#a-generic-settings-store-with-three-scopes"></a>
    Üç kapsamlı genel bir ayar deposu
</h2>

<p>İkinci parça, üç kapsam (platform (uygulama), şirket ve kullanıcı) için hizmet veren tek bir anahtar-değer deposudur. İlgili her konudan bir tablo yerine, tek bir tablo ve tek bir yapılandırma kaynağı gerçeği vardır:<br/></p>

<div class="highlight js-code-highlight">
    <pre class="highlight php"><code><span class="s1">'settings'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="s1">'support_email'</span>       <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'scope'</span> <span class="o">=&gt;</span> <span class="s1">'app'</span><span class="p">,</span>     <span class="s1">'type'</span> <span class="o">=&gt;</span> <span class="s1">'string'</span><span class="p">,</span>  <span class="s1">'public'</span> <span class="o">=&gt;</span> <span class="kc">true</span><span class="p">],</span>
        <span class="s1>'signups_enabled'</span>     <span class="o">=&gt;</span> <span class="p">[</span><span class="s1">'scope'</span> <span class="o">=&gt;</span> <span class="s1>'app'</span><span class="p">,</span>     <span class="s1>'type'</span> <span class="o">=&gt;</span> <span class="s1>'boolean'</span><span class="p">,</span> <span class="s1>'public'</span> <span class="o">=&gt;</span> <span class="kc">true</span><span class="p">],</span>
        <span class="s1>'timezone'</span>            <span class="o">=&gt;</span> <span class="p">[</span><span class="s1>'scope'</span> <span class="o">=&gt;</span> <span class="s1>'company'</span><span class="p">,</span> <span class="s1>'type'</span> <span class="o">=&gt;</span> <span class="s1>'string'</span><span class="p">,</span>  <span class="s1>'validation'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1>'timezone'</span><span class="p">]],</span>
        <span class="s1>'email_notifications'</span> <span class="o">=&gt;</span> <span class="p">[</span><span class="s1>'scope'</span> <span class="o">=&gt;</span> <span class="s1>'user'</span><span class="p">,</span>    <span class="s1>'type'</span> <span class="o">=&gt;</span> <span class="s1>'boolean'</span><span class="p">],</span>
    <span class="p">],</span>

Fullscreen moduna geç
Fullscreen modundan çık

<p>Kayıt, yalnızca beyan edilen anahtarların okunmasına veya yazılmasına izin verecek şekilde yapılandırılmıştır; böylece keyfi bir anahtar tabloya ulaşamaz ve her değer, tablodan önce beyan edilen tür ve kural ile kontrol edilir. Uygulama ayarları süper-yönetici tarafından düzenlenir. Şirket ayarları RBAC izinleriyle kontrol edilir ve her zaman aktif şirkete yönelik bir kapsamda sunulur, sunucu üzerinde çözülür, talep ile alınmaz. Kullanıcı ayarları, çağıranın kendi ayarlarıdır, bu nedenle kullanıcılar arası bir yazma işlemi gerçekleşmez.</p>

<p>Ayrıca anahtarlar, genel olarak işaretlenebilir ve ev sahibi, bunları ön uçta sunabilir. Bu, "kayıtların açık olup olmadığı" gibi bilgilerin, özel hiçbir şeyi açığa çıkarmadan, bir konuk sayfasına ulaşmasını sağlar.</p>

<h2>
    <a name="the-profile-hub" href="#the-profile-hub"></a>
    Profil merkezi
</h2>

<p>Üçüncü parça, tüm kendine hizmet eden hesap sayfalarını bir sekmeli sayfada toplar: profil alanları, şifre, iki faktörlü kimlik doğrulama, PIN, aktif oturumlar, avatar ve görünüm.</p>

<p>En çok önemsediğim kısım, sıkıcı hijyen detaylarıdır. E-posta değiştirme işlemi, mevcut şifrenizi isteyerek, e-posta doğrulamasını sıfırlar ve diğer oturumların geçersiz kılınmasını sağlar. UI tercihleri bir izin listesi aracılığıyla yazılır (bağış yapılan kod, yalnızca o sütuna her anahtarın girmesine izin veriyordu, bu tür detayları çıkarmaya çalıştığınızda fark edersiniz). Avatarlar mevcut medya hizmeti üzerinden geçer. Ve hesap silme ile veri dışa aktarma işlemleri zaten hazır, GDPR aşamasına geçmek için bekliyor.</p>

<h2>
    <a name="testing-and-integration" href="#testing-and-integration"></a>
    Test ve entegrasyon
</h2>

<p>Her alt aşama yeşil bir yüzleşme ile tamamlandı ve birleştirilmeden önce düşmanca bir gözden geçirme sürecinden geçti: aşama sonunda 667 arka uç testi Pest ve 151 ön uç testi vardı. Son olarak, tüm bu bileşen, ana uygulamaya entegre edildi (migrasyonlar, yayımlanan sayfalar, yeni bağımlılık, bir ön uç oluşturması) ve uçtan uca yeniden test edilmiştir, çünkü "pakette geçiyor" ve "paketin üstünde gerçek bir uygulamada çalışıyor" farklı iddialardır.</p>

<h2>
    <a name="follow-along" href="#follow-along"></a>
    Takip et
</h2>

<p>Bu, kamuya açık bir şekilde inşa etme serisinin bir aşamasıdır. Çekirdek, ücretsiz ve açıktır.</p>

Kaynak: Orijinal Makale

Laravel’i Ticari Projelerde Kullanmayı Neden Bırakmalısınız (Gizli Riskler)
PHP ve Laravel ile İmleç: Karışıklığı Önleyen .cursorrules
Laravel Yanıt Önbelleği Yanlış Dili Sunuyor: spatie/laravel-responsecache’i mcamara/laravel-localization ile Düzeltme
SaaS altyapıma bir denetim günlükü çıkardım ve inceleme yanlış bir şeyi kaydettiğini tespit etti.
Veritabanınız Zaten Cevaplara Sahip – Sadece Sormanız Gerekiyor
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Acil: GitHub, Microsoft Repolarında Şifre Hırsızlığı Yazılımını Engelledi
Sonraki Makale Apple AI fotoğraf düzenlemenin hayalini gerçeğe dönüştürüyor

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

FAANG Yerine MANGOS Dönemi Başlıyor
Genel
Anthropic Mythos Sınıfı İlk Modelini Tanıttı: Claude Fable Neler Sunuyor?
Liste
Yeni Star Fox Projesi: Kimlerin Yer Aldığını Öğrenince Heyecanlandım
Oyun
Meta’nın Kritik Kararı: İş Verilerini AI Kişiselleştirmede Kullanacak!
Siber Güvenlik
Acil: Microsoft Haziran 2026 Yamanı 3 Sıfır Gün Açığı ve 200 Hata Düzeltiyor
Siber Güvenlik
MacOS 27 Golden Gate: Yeni Özellikler ve Öne Çıkan Yenilikler
Genel
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?