<p>Ama ham PHP dosya fonksiyonları bu korumayı tamamen atlayabilir:</p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code>// Tehlikeli - kullanıcı girişi ile ham fonksiyon

$content = file_get_contents(storage_path($filename));

<p>Ve Laravel'in yanıt yardımcıları, yolları doğrudan PHP'ye geçirir - çağrılmadan önce doğrulamalısınız:</p>
<div class="highlight js-code-highlight">
    <pre class="highlight php"><code>// Yanıtı geçirmeden önce doğrulayın

$baseDir = realpath(storage_path(‘app/files’));
$requestedPath = realpath(storage_path(‘app/files/’ . $filename));

if (!$requestedPath || strpos($requestedPath, $baseDir . DIRECTORY_SEPARATOR) !== 0) {
abort(404);
}

return response()->file($requestedPath);

<p>Storage facade, yaygın hataları azaltmaya yardımcı olur, ama kullanıcıdan gelen kontrol edilen yolları doğrulama ve yetkilendirme gerekliliğini ortadan kaldırmaz. Ham PHP dosya fonksiyonları da aynı dikkat gerektirir.</p>

<h3>Path Traversal Önleme Kontrol Listesi</h3>
<p>Plain PHP için:</p>
<ul>
    <li>Kullanıcı girişlerini dosya yollarına doğrudan eklemeyin.</li>
    <li><code>realpath()</code> kullanarak yolları çözün ve bunların niyet edilen temel dizin içinde kalmasını doğrulayın.</li>
    <li>Çapraz platform güvenliği için yol karşılaştırmalarında <code>DIRECTORY_SEPARATOR</code> kullanın.</li>
    <li>Bilinen bir dosya kümesine sahip olduğunuzda, beyaz liste yaklaşımını kullanın.</li>
    <li>Sunucu düzeyinde bir güvenlik ağı olarak <code>open_basedir</code>'ı php.ini'de yapılandırın.</li>
    <li>Kullanıcı kontrolündeki girişle asla <code>include()</code> veya <code>require()</code> kullanmayın.</li>
    <li>Düz dosya yapıları için <code>basename()</code>'i, uygun yol doğrulaması için bir ek güvenlik önlemi olarak kullanın.</li>
</ul>

<p><strong>Laravel İçin</strong></p>
<ul>
    <li>Dosya işlemleri için Storage facade'ı kullanın - daha güvenli bir soyutlama sağlar.</li>
    <li><code>response()->file()</code> veya <code>response()->download()</code> için çağırmadan önce yolları <code>realpath()</code> ile doğrulayın.</li>
    <li>Kullanıcı girişini doğrudan <code>storage_path()</code>, <code>public_path()</code> veya <code>base_path()</code>'e geçmeyin.</li>
    <li>Storage facade kullanırken bile kullanıcı tarafından kontrol edilen yolları doğrulayın ve yetkilendirin.</li>
    <li>Hangi kullanıcıların hangi dosyalara erişebileceğini kontrol etmek için Laravel'in yetkilendirme katmanını kullanın.</li>
</ul>

<h3>Algının Nereye Uyduğunu</h3>

<p>Path traversal girişimlerinin kendine özgü istek desenleri oluşur. <code>../</code> dizelerinde ve URL ile kodlama dize desenlerinde <code>%2e%2e</code>, farklı dizin derinliklerini keşfetmek için tekrar eden istekler, <code>.env</code>, <code>passwd</code> ve <code>id_rsa</code> gibi bilinen hassas dosya konumlarını hedef alan istekler, otomatik tarayıcıların meşru kullanıcılar ile farkını belirleyen davranışsal sinyallerdir.</p>

<p>Bu desenler başarılı bir geçişten önce isteğiniz günlüklerinde görünür. Bu desenleri izlemek için güvenlik katmanının varlığı, ihlale dönüşmeden önce keşif faaliyetlerine görünürlük sağlar.</p>

<p>Önleme, geçişi durdurur. Algılama, birinin bunun peşinde olduğunu söyler.</p>

<p>Her iki katman birlikte.</p>

<p>"Bunu somut terimlere dökersek <strong>Kriosa, tek bir hafta içinde canlı bir PHP uygulamasında 306 saldırıyı engelledi</strong> - <code>../../../etc/passwd</code> ve <code>../../../var/www/.env</code> gibi istek parametrelerinde otomatik tarayıcıların göndermesi nedeniyle. Bunlar hedeflenmiş saldırılar değildi. Otomatik araçlar, bulabildikleri her PHP uygulamasını araştırıyorlardı."</p>

<p>Ücretsiz denemek için: <strong><a href="https://kriosa.com">kriosa.com</a></strong></p>

<p>Kurulum için: <strong>composer require kriosa-ai/kriosa-php</strong></p>

<p>Entegrasyon belgelerini görmek için <a href="https://kriosa.com/documentation.php" target="_blank" rel="noopener noreferrer">kriosa.com/documentation.php</a><br/> <br/>Güvenliklerini anlamak isteyen PHP ve Laravel geliştiricileri için - sadece dış kaynak sağlamaktan değil.<br/>Daha iyi bir uyku: biz uyanığız - kriosa </p>

Kaynak: Orijinal Makale

Bu Makaleyi Paylaş