<p><strong>SSRF koruması</strong>, özel IP'lere veya localhost'a işaret eden uzak resim kaynaklarını engeller.</p>

<p><strong>Görüntü bombası koruması</strong>, <code>max_image_pixels</code> değerini aşan dosyaları reddeder (varsayılan: 150 Mpx).</p>

<p><strong>İmzalı URL'ler</strong> (isteğe bağlı), parametrelerle oynamayı imkansız hale getirir:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight plaintext"><code>IMAGEPRESET_SIGNED_URL=true

<p>Etkinleştirildiğinde, <code>imagepreset_url()</code> otomatik olarak HMAC-imzası olan URL'ler oluşturur. Herhangi bir parametre değiştirilirse 403 döner.</p>

<hr/>

<h2>
    <a name="race-condition-protection" href="#race-condition-protection"></a>
    Yarış Koşulu Koruması
</h2>

<p>50 kullanıcı aynı anda aynı önbelleğe alınmamış resmi talep ettiğinde ne olur? Koruma olmadan, aynı resmi 50 kez işlersiniz.</p>

<p>Paket, bir süreç yalnızca bir varyant oluşturacak şekilde <code>Cache::lock()</code> kullanır. Bunun düzgün çalışması için <code>CACHE_DRIVER=redis</code> ayarlayın ve birden fazla sunucu arasında çalışmasını sağlayın.</p>

<hr/>

<h2>
    <a name="audit-log-discover-what-your-frontend-actually-needs" href="#audit-log-discover-what-your-frontend-actually-needs"></a>
    Denetim Kaydı: Ön Yüzünüzün Gerçekten Ne İhtiyacı Olduğunu Keşfedin
</h2>

<p>Üretimde izin listelerini kilitlemeden önce, geliştirme sırasında tam olarak hangi parametrelerin ön yüzünüz tarafından talep edildiğini görmek için denetim günlüklemeyi etkinleştirebilirsiniz:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight plaintext"><code>IMAGEPRESET_AUDIT_LOG=true

<p>Sonrasında günlüklerinizden benzersiz değerleri çıkartın:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code>grep -oh '"w":[0-9]*' storage/logs/*log | sort -u

<p>Edinilen verileri kullanarak, dağıtımdan önce izin listelerinizi doldurun.</p>

<hr/>

<h2>
    <a name="cdn-and-nginx-caching" href="#cdn-and-nginx-caching"></a>
    CDN ve Nginx Önbellekleme
</h2>

<p>Tüm yanıtlar ile birlikte gelir:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight http"><code>Cache-Control: public, max-age=31536000, s-maxage=31536000, immutable

ETag: “

<p>Bu, onu uç noktada önbelleğe almayı kolaylaştırır. README, Nginx proxy önbelleği ve Cloudflare Önbelleği Kuralları için hazır kullanıma yönelik yapılandırmalar içerir.</p>

<p>Önbelleğinizin çalıştığını doğrulamak için:</p>

<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code># İki kez çalıştırın — ilki MISS, ikincisi HIT olmalıdır

curl -s -o /dev/null -D – “https://example.com/imagepreset?src=photo.jpg&amp;w=800&amp;fm=webp

<hr/>

<h2>
    <a name="clearing-the-cache" href="#clearing-the-cache"></a>
    Önbelleği Temizleme
</h2>

<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code># Tüm önbelleğe alınmış ön ayarları temizle

php artisan imagepresets:clear

Belirli bir uzak diski temizleme

php artisan imagepresets:clear –disk=s3 –path=imagepresets

<hr/>

<h2>
    <a name="requirements" href="#requirements"></a>
    Gereksinimler
</h2>

<div class="table-wrapper-paragraph">
    <table>
        <thead>
            <tr>
                <th>Bağımlılık</th>
                <th>Sürüm</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>PHP</td>
                <td>^8.1</td>
            </tr>
            <tr>
                <td>Laravel</td>
                <td>10 / 11 / 12 / 13</td>
            </tr>
            <tr>
                <td>league/glide</td>
                <td>^2.0 | ^3.0</td>
            </tr>
        </tbody>
    </table>
</div>

<p>İsteğe bağlı: <code>imagick</code> uzantısı, AVIF çıktısı ve SVG rasterizasyonu için.</p>

<hr/>

<h2>
    <a name="wrapping-up" href="#wrapping-up"></a>
    Sonuç
</h2>

<p>Projeniz, Spatie Media Library'nin tüm gücüne ihtiyaç duymuyorsa — ilişkiler, dönüşümler, duyarlı resimler — sadece doğru resim boyutunu sunmak istiyorsanız, <code>laravel-imagepresets</code>'e bir göz atmalısınız.</p>

<p>Kurulumunu yapın, birkaç ön ayar tanımlayın, Blade şablonlarınıza <code>@imagepreset()</code> ekleyin ve işte bu kadar.</p>

<div class="highlight js-code-highlight">
    <pre class="highlight shell"><code>composer require fomvasss/laravel-imagepresets

<p>→ <a href="https://github.com/fomvasss/laravel-imagepresets" target="_blank" rel="noopener noreferrer">GitHub</a> · <a href="https://packagist.org/packages/fomvasss/laravel-imagepresets" target="_blank" rel="noopener noreferrer">Packagist</a></p>

<hr/>

<p><em>Herhangi bir sorunuz varsa veya bir hata bulduysanız, GitHub'da bir sorun açın.</em></p>

Kaynak: Orijinal Makale

Bu Makaleyi Paylaş