# Local File Inclusion i PHP a chosc: LFI agus RFI

> Local File Inclusion i PHP a chosc: liostaí ceadaithe in ionad cosáin ón iarratas, seiceáil realpath, allow_url_include múchta agus open_basedir.

Foinse: https://phpsos.de/ga/ratgeber/lfi-rfi/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**Go achomair:** Tarlaíonn Local File Inclusion i PHP nuair a úsáideann `include`, `require` nó feidhmeanna comhad cosán ar féidir leis an gcuairteoir tionchar a imirt air. Is é an réiteach slán liosta ceadaithe seasta: ní roghnaíonn an paraiméadar ach as luachanna aitheanta, ní thagann an cosán féin ón iarratas riamh. Ar thaobh an fhreastalaí comhlánaíonn `allow_url_include=Off`, `open_basedir` agus cearta comhad srianta an chosaint.

## Cad is Local File Inclusion i PHP ann?

Luchtaíonn a lán seanfheidhmchlár PHP leathanaigh de réir patrúin shimplí: socraíonn paraiméadar sa seoladh cén comhad a chuirtear isteach. Má thugtar an paraiméadar seo do `include` gan seiceáil, is féidir le hionsaitheoir comhaid eile ar an bhfreastalaí a iarraidh. Sa chás is éadroime léann sé comhaid chumraíochta le dintiúir. Sa chás is measa, cuireann sé iallach ar PHP inneachar a rith a leag sé síos in áit eile roimhe sin, mar shampla in uaslódáil nó i logchomhad.

Don bhainistíocht tá sé tábhachtach: is annamh a bhíonn an bhearna seo i gcroílár an CMS, ach go hiondúil i bhforbairtí féin, i seaneisínteachtaí nó i leathanaigh bhreise a tógadh go tapa. Ní thugtar faoi deara é sa ghnáthshaol, mar go n-oibríonn an suíomh gréasáin go normálta.

Le **Remote File Inclusion** luchtaíonn PHP cód ó sheoladh coimhthíoch. Cuireann sé sin i gcás go bhfuil `allow_url_include` gníomhachtaithe. I leaganacha reatha PHP tá an socrú seo múchta de réir réamhshocraithe, ach ar sheanfhreastalaithe nó ar fhreastalaithe cumraithe go mícheart aimsítear fós é.

### Patrúin leochaileacha thipiciúla sa chód

Tá áiteanna i mbaol ina bhfuil luach ón iarratas, ó fhianáin nó ón mbunachar sonraí ina chuid de chosán comhaid. Samplaí coitianta is ea athraitheoirí teanga a luchtaíonn comhad teanga de réir paraiméadair, roghnú leathanach trí pharaiméadar sa seoladh, roghnú teimpléid nó téama agus scripteanna íoslódála do dhoiciméid. Ní chosnaíonn `.php` ceangailte ag deireadh an chosáin go hiontaofa anseo, mar gur féidir le hionsaitheoirí aistriú chuig comhaid PHP atá ann cheana.

Faigheann tú chéad forbhreathnú le cuardach ar áireamh ina bhfuil athróga. Tugann sé torthaí neamhdhíobhálacha freisin, ach léiríonn sé cén áit ar gá féachaint níos géire:

```bash
grep -rnE --include='*.php' '(include|require)(_once)?\s*\(?\s*\$' /var/www/projekt \
  | grep -v '/vendor/'
```

Seiceáil gach torthaí chun a fháil amach cárb as a dtagann an athróg agus an féidir le cuairteoir tionchar a imirt uirthi.

## An patrún slán: liosta ceadaithe in ionad cosáin ón iarratas

Is é an chosaint is iontaofa ná nach roghnaíonn an cuairteoir ach eochair, agus go gcinneann an feidhmchlár féin cén comhad a bhaineann léi. Ní chuirtear an cosán le chéile as ionchuir riamh.

```php
<?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];
```

Tá an patrún seo gearr, éasca le seiceáil agus ní fhágann sé spás gluaiseachta. I gcreataí nua-aimseartha glacann an ródaire an tasc seo air; ba cheart do rialaitheoirí agus do theimpléid gan a bheith socraithe ó pharaiméadair shaora ansin ach an oiread.

## Nuair a chaithfidh ainmneacha comhad a bheith dinimiciúil: realpath agus bunchomhadlann

Uaireanta ní praiticiúil liosta seasta, mar shampla le híoslódálacha ó fhillteán doiciméad. Ansin seiceálann tú an cosán réitithe i gcoinne bunchomhadlainne seasta agus ní cheadaíonn tú ach ainmneacha comhad simplí.

```php
<?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;
}

// Seachadadh in ionad áirimh: ní rithfidh readfile() aon chód.
$datei = sichererPfad((string) ($_GET['datei'] ?? ''));
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($datei) . '"');
readfile($datei);
```

Tá dhá phointe cinntitheach. Ní cheadaíonn an slonn rialta deighilteoirí comhadlainne ná carachtair speisialta. Agus léitear comhaid nach bhfuil le seachadadh ach le `readfile()`, ní le `include`, ionas nach ritear cód ar bith atá iontu. Tá `str_starts_with()` ar fáil ó PHP 8.0 ar aghaidh.

## Cosaint ar thaobh an fhreastalaí: php.ini, open_basedir agus cearta

Is é cód slán an chéad líne chosanta. Cinntíonn cumraíocht an fhreastalaí go ndéanann earráid a fágadh ar lár níos lú damáiste.

```ini
; php.ini nó linn FPM (php_admin_value / php_admin_flag)
allow_url_include = Off
allow_url_fopen   = Off   ; ach amháin mura luchtaíonn an feidhmchlár URLanna seachtracha
open_basedir      = /var/www/kunde-a/:/tmp/kunde-a/
display_errors    = Off
log_errors        = On
```

Teastaíonn `allow_url_fopen` ó roinnt feidhmchlár le haghaidh nuashonruithe nó comhéadan. Tástáil an múchadh ar thimpeallacht tástála ar dtús. Teorannaíonn `open_basedir` PHP do chomhadlanna féin an tsuímh, rud atá tábhachtach go háirithe ar fhreastalaithe le roinnt cliant. Tá mionsonraí sna treoracha [open_basedir agus scaradh do gach suíomh](https://phpsos.de/ga/ratgeber/open-basedir/) agus [php.ini a chumrú go slán](https://phpsos.de/ga/ratgeber/php-ini-sicher-konfigurieren/).

Ina theannta sin níor cheart go mbeadh fillteáin uaslódála agus taisce inrite agus níor cheart logchomhaid a bheith sa fhréamhchomhadlann ghréasáin. Ar an gcaoi sin tá na háiteanna ar iarraidh ar ionsaitheoir inar féidir leis a inneachar féin a leagan síos le haghaidh áirimh.

## Conas a aithníonn tú iarrachtaí leasa i logaí

Fágann iarrachtaí File Inclusion a shaothrú rianta sa logchomhad rochtana den chuid is mó. Is suntasach paraiméadair ina bhfuil athruithe comhadlainne, cosáin chórais iomlána, wrapálaithe sruth nó seoltaí coimhthíocha iomlána, go háirithe i bparaiméadair ar nós `page`, `file`, `template` nó `lang`. Is scanadh uathoibrithe de ghnáth torthaí aonair. Is tábhachtach an bhfreagraíodh iarratas den sórt sin le cód stádais 200 agus méid freagra neamhghnách.

Conas a théann tú ar aghaidh go córasach, déanann [Logaí an fhreastalaí gréasáin a anailísiú tar éis ionsaithe](https://phpsos.de/ga/ratgeber/logfiles-auswerten/) cur síos air. Má aimsíonn tú leideanna ar rochtain rathúil, glac leis gur léadh comhaid chumraíochta agus athnuaigh na dintiúir atá iontu.

Orthu sin tá, thar aon rud eile, focail fhaire bunachair sonraí, eochracha do sheirbhísí íocaíochta agus seachadta, rochtana SMTP agus eochracha rúnda an CMS. Seiceáil freisin ar cruthaíodh comhaid nua ón gcéad rochtain amhrasach. An té a d'fhéadfadh comhaid a léamh, b'fhéidir gur bhain sé triail as a gcuid féin a leagan síos freisin. Sa chás sin ní bearna sa chód amháin atá i gceist a thuilleadh, ach teagmhas slándála ar cheart é a láimhseáil ar bhealach struchtúrtha.

### Ceartúcháin a chosaint go buan

Tar éis ceartaithe is fiú an fheidhm chosanta a chosaint le tástálacha uathoibrithe. Tugann tástáil shimplí luachanna anaithnide, athruithe comhadlainne agus ionchuir fholmha don roghnú leathanach agus tá sí ag súil leis an leathanach caighdeánach nó le hearráid 404 i ngach cás. Cuireann tástálacha den sórt sin cosc ar athrú níos déanaí an bhearna a oscailt arís gan aird.

Don bhainistíocht agus do chinnirí tionscadail is cabhrach ceist amháin a chur ar an ngníomhaireacht: An bhfuil áiteanna san fheidhmchlár ina luchtaítear comhaid de réir paraiméadar, agus conas a chosnaítear iad? Is comhartha maith é freagra nithiúil le háiteanna aimsithe agus tástálacha.

## Conas a chabhraíonn PHP SOS go nithiúil?

- Cuardaímid do chód go sonrach le haghaidh `include`, `require` agus feidhmeanna comhad le hionchuir ón iarratas agus measaimid gach fionnachtain.
- Socraímid `allow_url_include`, `open_basedir` agus cearta oiriúnacha do gach suíomh agus seiceálaimid go n-oibríonn an feidhmchlár fós ina dhiaidh sin.
- Anailísímid logaí le haghaidh iarrachtaí leasa agus soiléirímid an gá dintiúir a athnuachan.
- Le haghaidh seiceála neamhspleáiche, tairgimid [iniúchadh slándála le tástáil threáite](https://phpsos.de/ga/leistungen/sicherheitsaudit-penetrationstest/) d'fheidhmchláir PHP.


## Ceisteanna coitianta

**Cén difríocht atá idir LFI agus RFI?**  
Le Local File Inclusion luchtaíonn an feidhmchlár comhad atá ar an bhfreastalaí cheana, ach nár cheart a luchtú. Le Remote File Inclusion luchtaítear cód ó sheoladh coimhthíoch. Cuireann RFI socrú PHP neamhshlán i gcás, ní chuireann LFI.

**An leor ../ a bhaint den pharaiméadar?**  
Ní leor. Is minic is féidir scagairí den sórt sin a sheachaint trí ionchódú nó leaganacha agus ní thugann siad cosáin iomlána faoi deara. Ní slán ach sannadh seasta de luachanna ceadaithe do chomhaid nó seiceáil ar an gcosán réitithe i gcoinne bunchomhadlainne.

**An gcosnaíonn open_basedir go hiomlán in aghaidh File Inclusion?**  
Ní chosnaíonn, ní theorannaíonn sé ach na comhadlanna ar féidir le PHP rochtain a fháil orthu. Laistigh de na teorainneacha sin is féidir leas a bhaint as bearna fós. Is sraith chosanta bhreise é open_basedir agus ní chuireann sé cód slán ina ionad.

**An bhfuil CMS ar nós WordPress buailte ag LFI?**  
Meastar go bhfuil croílár CMS coitianta seiceáilte go maith sa phointe seo. Tagann bearnaí chun solais níos minice in eisínteachtaí, téamaí agus forbairtí féin. Tá nuashonruithe eisínteachtaí agus sracfhéachaint ar a dtuarascálacha slándála tábhachtach dá bhrí sin.

## Foinsí

- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [BSI IT-Grundschutz (bonnchosaint TF)](https://www.bsi.bund.de/DE/Themen/Unternehmen-und-Organisationen/Standards-und-Zertifizierung/IT-Grundschutz/it-grundschutz_node.html)
