Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

Kif tevitaw Local File Inclusion f'PHP: LFI u RFI

Meta include jew require jieħdu mogħdijiet mit-talba, l-attakkanti jistgħu jgħabbu fajls barranin. Kif tibnu b'mod sikur l-għażla tal-paġni u t-templates u tassiguraw is-server addizzjonalment.

Stat 6 min. qariGwidi

Fil-qosor: Local File Inclusion f'PHP tinħoloq meta include, require jew funzjonijiet tal-fajls jużaw mogħdija li l-viżitatur jista' jinfluwenza. Is-soluzzjoni sikura hija lista permessa fissa: il-parametru jagħżel biss minn valuri magħrufa, il-mogħdija nnifisha qatt ma tiġi mit-talba. Fuq in-naħa tas-server allow_url_include=Off, open_basedir u drittijiet restrittivi tal-fajls jikkompletaw il-protezzjoni.

X'inhi Local File Inclusion f'PHP?

Ħafna applikazzjonijiet eqdem ta' PHP jgħabbu l-paġni skont mudell sempliċi: parametru fl-indirizz jiddetermina liema fajl jiddaħħal. Jekk dan il-parametru jiġi mgħoddi mhux ivverifikat lil include, attakkant jista' jitlob fajls oħra fuq is-server. Fl-aħjar każ jaqra fajls ta' konfigurazzjoni b'kredenzjali. Fl-agħar każ iġiegħel lil PHP jesegwixxi kontenut li qabel poġġa x'imkien ieħor, pereżempju f'upload jew f'fajl tal-log.

Għall-maniġment hu importanti: din il-vulnerabbiltà rari tkun fil-qalba tas-CMS, imma l-aktar fi żviluppi proprji, estensjonijiet qodma jew paġni addizzjonali mibnija bil-għaġla. Ma tidhirx fil-ħajja ta' kuljum, għax il-websajt taħdem b'mod normali.

F'Remote File Inclusion PHP jgħabbi kodiċi minn indirizz barrani. Dan jippreżupponi li allow_url_include ikun attivat. F'verżjonijiet attwali ta' PHP dan l-issettjar huwa mitfi b'mod standard, imma fuq servers qodma jew ikkonfigurati ħażin għadu jinstab.

Mudelli vulnerabbli tipiċi fil-kodiċi

Fil-periklu huma postijiet fejn valur mit-talba, minn cookies jew mid-database jsir parti minn mogħdija ta' fajl. Eżempji frekwenti huma selettur tal-lingwa li jgħabbi fajl tal-lingwa skont parametru, għażla tal-paġna permezz ta' parametru fl-indirizz, għażla ta' templates jew themes u skripts ta' download għal dokumenti. .php imwaħħal fl-aħħar tal-mogħdija ma jipproteġix b'mod affidabbli, għax l-attakkanti jistgħu jaqilbu għal fajls PHP eżistenti.

L-ewwel ħarsa ġenerali tiksbuha b'tiftix għal inklużjonijiet li fihom varjabbli. Iwassal ukoll sejbiet bla ħsara, imma juri fejn għandu jitħares aktar mill-qrib:

grep -rnE --include='*.php' '(include|require)(_once)?\s*\(?\s*\$' /var/www/projekt \
  | grep -v '/vendor/'

Ivverifikaw kull sejba minn fejn ġejja l-varjabbli u jekk viżitatur jistax jinfluwenzaha.

Il-mudell sikur: lista permessa minflok mogħdija mit-talba

L-aktar protezzjoni affidabbli hija li l-viżitatur jagħżel biss ċavetta u l-applikazzjoni stess tiddeċiedi liema fajl jappartjeni għaliha. Il-mogħdija qatt ma tinbena minn inputs.

<?php
declare(strict_types=1);

$seiten = [
    'start'      => __DIR__ . '/../vorlagen/start.php',
    'leistungen' => __DIR__ . '/../vorlagen/leistungen.php',
    'kontakt'    => __DIR__ . '/../vorlagen/kontakt.php',
];

$wahl = is_string($_GET['seite'] ?? null) ? $_GET['seite'] : 'start';

if (!array_key_exists($wahl, $seiten)) {
    http_response_code(404);
    $wahl = 'start';
}

require $seiten[$wahl];

Dan il-mudell huwa qasir, faċli biex jiġi vverifikat u ma jħalli l-ebda spazju. Fi frameworks moderni r-router jieħu din il-kompitu; hemmhekk ukoll il-kontrollers u t-templates m'għandhomx qatt jiġu ddeterminati minn parametri ħielsa.

Meta l-ismijiet tal-fajls jridu jkunu dinamiċi: realpath u direttorju bażiku

Kultant lista fissa mhix prattika, pereżempju f'downloads minn folder tad-dokumenti. Allura ivverifikaw il-mogħdija solvuta kontra direttorju bażiku fiss u ippermettu biss ismijiet sempliċi ta' fajls.

<?php
declare(strict_types=1);

const BASIS = '/var/www/daten/dokumente';

function sichererPfad(string $name): string
{
    if (!preg_match('/^[a-z0-9_-]{1,64}\.pdf$/', $name)) {
        throw new InvalidArgumentException('Ungültiger Dateiname.');
    }

    $basis = realpath(BASIS);
    $pfad  = realpath($basis . DIRECTORY_SEPARATOR . $name);

    if ($basis === false || $pfad === false
        || !str_starts_with($pfad, $basis . DIRECTORY_SEPARATOR)) {
        throw new RuntimeException('Datei nicht gefunden.');
    }

    return $pfad;
}

// Ikkunsinjaw minflok ma tinkludu: readfile() ma jesegwix l-ebda kodiċi.
$datei = sichererPfad((string) ($_GET['datei'] ?? ''));
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($datei) . '"');
readfile($datei);

Żewġ punti huma deċiżivi. L-espressjoni regolari ma tippermetti l-ebda separaturi tad-direttorji u l-ebda karattri speċjali. U l-fajls li għandhom jiġu biss ikkunsinjati jinqraw b'readfile(), mhux b'include, biex kodiċi li jinsab fihom qatt ma jiġi eżegwit. str_starts_with() hija disponibbli minn PHP 8.0.

Protezzjoni fuq in-naħa tas-server: php.ini, open_basedir u drittijiet

Kodiċi sikur huwa l-ewwel linja ta' difiża. Il-konfigurazzjoni tas-server tiżgura li żball li ma ġiex innotat jagħmel inqas ħsara.

; php.ini jew pool FPM (php_admin_value / php_admin_flag)
allow_url_include = Off
allow_url_fopen   = Off   ; biss jekk l-applikazzjoni ma tgħabbix URLs esterni
open_basedir      = /var/www/kunde-a/:/tmp/kunde-a/
display_errors    = Off
log_errors        = On

allow_url_fopen ċerti applikazzjonijiet jeħtiġuh għal aġġornamenti jew interfaces. Ittestjaw it-tifi l-ewwel f'ambjent tat-test. open_basedir jillimita lil PHP għad-direttorji proprji tal-websajt, li huwa speċjalment importanti fuq servers b'diversi klijenti. Dettalji jinsabu fil-gwidi open_basedir u iżolament għal kull websajt u Kif tikkonfiguraw php.ini b'mod sikur.

Barra minn hekk, id-direttorji tal-upload u tal-cache m'għandhomx ikunu eżegwibbli u l-fajls tal-log m'għandhomx jinsabu fil-webroot. B'hekk l-attakkant jitlef il-postijiet fejn seta' jpoġġi kontenut proprju għall-inklużjoni.

Kif tagħrfu tentattivi ta' sfruttament fil-logs

Tentattivi biex file inclusion tiġi sfruttata ġeneralment iħallu traċċi fil-log tal-aċċess. Jolqtu l-għajn parametri li fihom bidliet tad-direttorju, mogħdijiet assoluti tas-sistema, stream wrappers jew indirizzi barranin sħaħ, speċjalment f'parametri bħal page, file, template jew lang. Sejba waħda ġeneralment hija scanning awtomatizzat. Importanti hu jekk talba bħal din ġietx imwieġba bil-kodiċi ta' stat 200 u b'daqs mhux tas-soltu tat-tweġiba.

Kif tipproċedu b'mod sistematiku jiddeskrivi Kif tevalwaw il-logs tas-server wara attakk. Jekk issibu indikazzjonijiet ta' aċċessi b'suċċess, ippreżumu li l-fajls ta' konfigurazzjoni nqraw u ġeddu l-kredenzjali li jinsabu fihom.

Dan jinkludi fuq kollox il-passwords tad-database, iċ-ċwievet għas-servizzi tal-ħlas u tal-ispedizzjoni, l-aċċessi SMTP u ċ-ċwievet sigrieti tas-CMS. Ivverifikaw ukoll jekk mill-ewwel aċċess suspettuż inħolqu fajls ġodda. Min seta' jaqra fajls, forsi pprova wkoll jpoġġi tiegħu. F'dan il-każ mhuwiex biss kwistjoni ta' vulnerabbiltà fil-kodiċi, imma ta' inċident tas-sigurtà li għandu jiġi ttrattat b'mod strutturat.

Assiguraw il-korrezzjonijiet b'mod dejjiemi

Wara korrezzjoni jixraq li l-funzjoni ta' protezzjoni tiġi assigurata b'testijiet awtomatizzati. Test sempliċi jgħaddi lill-għażla tal-paġna valuri mhux magħrufa, bidliet tad-direttorju u inputs vojta u jistenna fil-każijiet kollha l-paġna standard jew żball 404. Testijiet bħal dawn jipprevjenu li bidla aktar tard terġa' tiftaħ il-vulnerabbiltà mingħajr ma tiġi nnotata.

Għall-maniġment u r-responsabbli tal-proġetti tgħin mistoqsija lill-aġenzija: Hemm fl-applikazzjoni postijiet fejn il-fajls jitgħabbew skont parametri, u kif huma assigurati? Tweġiba konkreta b'postijiet misjuba u testijiet hija sinjal tajjeb.

Kif tgħin PHP SOS b'mod konkret?

  • Infittxu fil-kodiċi tagħkom b'mod immirat għal include, require u funzjonijiet tal-fajls b'inputs mit-talba u nevalwaw kull sejba.
  • Niffissaw allow_url_include, open_basedir u drittijiet xierqa għal kull websajt u nivverifikaw li l-applikazzjoni tkompli taħdem wara.
  • Nevalwaw il-logs għal tentattivi ta' sfruttament u niċċaraw jekk il-kredenzjali jridux jiġu mġedda.
  • Għal verifika indipendenti noffru awdit tas-sigurtà b'test ta' penetrazzjoni għal applikazzjonijiet ta' PHP.

Mistoqsijiet frekwenti

X'inhi d-differenza bejn LFI u RFI?

F'Local File Inclusion l-applikazzjoni tgħabbi fajl li diġà jinsab fuq is-server, imma li ma kellux jitgħabba. F'Remote File Inclusion jitgħabba kodiċi minn indirizz barrani. RFI jippreżupponi issettjar mhux sikur ta' PHP, LFI le.

Huwa biżżejjed li neħħi ../ mill-parametru?

Le. Filtri bħal dawn spiss jistgħu jiġu evitati b'kodifika jew varjanti u ma jaqbdux mogħdijiet assoluti. Sikura hija biss assenjazzjoni fissa ta' valuri permessi għal fajls jew verifika tal-mogħdija solvuta kontra direttorju bażiku.

open_basedir jipproteġi għal kollox minn file inclusion?

Le, jillimita biss id-direttorji li PHP jista' jaċċessa. Ġewwa dawn il-limiti vulnerabbiltà tibqa' tista' tiġi sfruttata. open_basedir huwa saff addizzjonali ta' protezzjoni u ma jissostitwixxix kodiċi sikur.

CMS bħal WordPress huma affettwati minn LFI?

Il-qalba tas-CMS komuni titqies f'dan il-punt bħala verifikata tajjeb. Vulnerabbiltajiet jidhru aktar fl-estensjonijiet, fit-themes u fi żviluppi proprji. Aġġornamenti tal-estensjonijiet u ħarsa lejn l-avviżi tas-sigurtà tagħhom huma għalhekk importanti.

Sorsi

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata