Go achomair: I slándáil seisiún PHP tá ceithre rud tábhachtach: socruithe slána fianán, ID seisiúin nua tar éis gach logáil isteach, láithreacha stórála scartha agus cosanta agus ré ghearr. Mar gheall ar PHP2Shell ba cheart session.upload_progress.enabled=0 a shocrú ar thaobh an fhreastalaí freisin, fad is nach bhfuil aon chúis leis an bhfeidhm seo.
Cén fáth a bhfuil seisiúin ina sprioc luachmhar
Cuimhníonn seisiún go bhfuil úsáideoir logáilte isteach. Go teicniúil faigheann an brabhsálaí ID randamach seisiúin i bhfianán chuige sin, agus stórálann an freastalaí na sonraí gaolmhara. An té a bhfuil an ID ar eolas aige, is é an t-úsáideoir céanna é don fheidhmchlár, gan focal faire agus gan dara fachtóir.
Do oibreoirí ciallaíonn sé seo: is féidir le bainistiú seisiún lag cosaint logáil isteach a chur ar neamhní, fiú nuair a chuirtear focail fhaire agus logáil isteach dhá fhachtóir i bhfeidhm go glan. Tá sé seo thar a bheith criticiúil i réimsí riarthóra, i gcuntais chliant agus i dtairseacha le sonraí pearsanta.
Is iad na rioscaí tipiciúla ná ID an tseisiúin a ghabháil (Session-Hijacking), ID aitheanta a chur isteach roimh logáil isteach (Session-Fixation) agus seisiúin atá bailí ró-fhada ar ríomhairí comhroinnte.
Bunsocruithe slána i php.ini
Is féidir na luachanna is tábhachtaí a shocrú go lárnach i php.ini nó do gach suíomh sa linn FPM. Sa linn úsáideann tú php_admin_value nó php_admin_flag, ionas nach féidir leis an bhfeidhmchlár na luachanna a fhorscríobh.
; Bunchruatú seisiún
session.use_strict_mode = 1
session.use_only_cookies = 1
session.use_trans_sid = 0
session.cookie_httponly = 1
session.cookie_secure = 1
session.cookie_samesite = "Lax"
session.cookie_lifetime = 0
session.gc_maxlifetime = 1800
session.name = "APPSESSID"
; Comhairle PHP2Shell ó php.net, ansin gach oibrí a atosú
session.upload_progress.enabled = 0
Cinntíonn use_strict_mode nach nglacann PHP le haon ID anaithnid a thugann an brabhsálaí. Cuireann cookie_httponly cosc ar JavaScript an ID a léamh, rud a theorannaíonn iarmhairtí Cross-Site Scripting. Ní sheolann cookie_secure an fianán ach trí HTTPS. Déanann SameSite=Lax iarratais Cross-Site le seisiún bailí níos deacra; do réimsí riarthóra amháin d'fhéadfadh Strict a bheith oiriúnach.
Is luach samplach é an ré 1,800 soicind. Socraigh í de réir an riachtanais cosanta: níos giorra don riarachán agus do shonraí cliant, níos faide ach amháin san áit a bhfuil gá leis go gairmiúil.
Tabhair faoi deara nach socraíonn gc_maxlifetime ach ón uair a cheadaítear sonraí seisiún sean a scriosadh. Ar roinnt dáiltí, ní PHP féin a ghlanann na comhaid seisiún, ach jab córais rialta. Seiceáil ansin cén luach a úsáideann an jab sin, ionas go dtéann do shocrú i bhfeidhm i ndáiríre. Ná bí ag brath ar an bhfeidhm ghlantacháin amháin chun logáil amach tar éis easpa gníomhaíochta, ach seiceáil am an ghnímh dheireanaigh san fheidhmchlár féin, mar a thaispeántar sa sampla seo a leanas.
An ID seisiúin a athnuachan tar éis logáil isteach
Is í an riail is tábhachtaí sa chód ná an ID seisiúin a ghiniúint as an nua le gach athrú údaráis, is é sin le logáil isteach, le hathrú go mód riarthóra agus le logáil amach. Taispeánann an sampla seo a leanas patrún glan le password_verify():
<?php
declare(strict_types=1);
session_start();
function anmelden(PDO $db, string $email, string $passwort): bool
{
$stmt = $db->prepare('SELECT id, passwort_hash FROM benutzer WHERE email = :email');
$stmt->execute(['email' => $email]);
$nutzer = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$nutzer || !password_verify($passwort, $nutzer['passwort_hash'])) {
return false; // an teachtaireacht chéanna do sheoladh mícheart agus d'fhocal faire mícheart
}
session_regenerate_id(true); // ID nua, an seanchinn a chaitheamh amach
$_SESSION['benutzer_id'] = (int) $nutzer['id'];
$_SESSION['letzte_aktion'] = time();
return true;
}
function pruefeLeerlauf(int $sekunden = 900): void
{
if (isset($_SESSION['letzte_aktion']) && time() - $_SESSION['letzte_aktion'] > $sekunden) {
abmelden();
return;
}
$_SESSION['letzte_aktion'] = time();
}
function abmelden(): void
{
$_SESSION = [];
$p = session_get_cookie_params();
setcookie(session_name(), '', [
'expires' => time() - 3600,
'path' => $p['path'],
'domain' => $p['domain'],
'secure' => $p['secure'],
'httponly' => $p['httponly'],
'samesite' => $p['samesite'],
]);
session_destroy();
}
Ina theannta sin, cosain foirmeacha a athraíonn rud éigin le comhartha CSRF. Giniúintear é le bin2hex(random_bytes(32)), stóráiltear sa seisiún é agus déantar comparáid leis le hash_equals() nuair a sheoltar an fhoirm.
Láithreacha stórála agus scaradh tionóntaí
De réir réamhshocraithe stórálann PHP seisiúin mar chomhaid i gcomhadlann chomhroinnte. Ar fhreastalaí le roinnt suíomhanna gréasáin is féidir go gciallaíonn sé sin gur féidir le suíomh a ndearnadh briseadh isteach air seisiúin suímh eile a léamh. Dá bhrí sin baineann linn ar leith le húsáideoir ar leith agus cosán seisiún ar leith le gach suíomh.
; sa linn FPM den suíomh ábhartha
php_admin_value[session.save_path] = /var/lib/php/sessions/kunde-a
Ba cheart go mbeadh an chomhadlann ag úsáideoir na linne agus na cearta 0700 a bheith aici. Conas suíomhanna a scaradh óna chéile ina theannta sin, déanann an treoir open_basedir agus scaradh do gach suíomh cur síos air. Má stóráiltear seisiúin i Redis nó i mbunachar sonraí, baineann na prionsabail chéanna: rochtain ar leith do gach feidhmchlár, gan rochtain líonra oscailte.
Slándáil seisiún PHP agus PHP2Shell
Tá na leochaileachtaí PHP2Shell CVE-2026-109618 agus CVE-2026-109619 i PHP féin. Mar cheann de na bearta idirthréimhseacha, luann php.net session.upload_progress.enabled=0 a shocrú i php.ini, sa linn FPM nó i gcumraíocht an fhreastalaí agus gach oibrí a atosú ina dhiaidh sin. Go sainráite ní trí ini_set() ná .user.ini.
An 23.10.2026 lean comhairle faoi CVE-2026-115560. Ní bhíonn rith cóid indéanta ansin ach le teaglaim neamhghnách de shraitheadú seisiún, athrú trí ini_set() roimh session_start() agus upload progress gníomhach. Is é an réiteach an socrú céanna, go dtí an chéad eisiúint ghnáth eile le ceartúcháin fabhtanna.
Is beart idirthréimhseach é an socrú seo agus ní cosaint iomlán. Fanann an nuashonrú go leagan ceartaithe PHP agus an t-atosú ina dhiaidh ar gach oibrí PHP cinntitheach.
Seiceáil tar éis an athraithe cén luach atá i bhfeidhm i ndáiríre. Taispeánann an líne ordaithe cumraíocht dhifriúil go minic ón bhfreastalaí gréasáin; is tairbheach leathanach seiceála cosanta a scriostar arís ina dhiaidh sin nó cumraíocht na linne féin.
Earráidí tipiciúla le seisiúin i bhfeidhmchláir PHP
Ní eascraíonn a lán laigí as socruithe atá ar iarraidh, ach as an gcaoi a n-úsáideann feidhmchláir seisiúin. Ba cheart duit fiafraí go sonrach faoi na patrúin seo i do chód féin agus ag soláthraithe seirbhíse:
- An iomarca sa seisiún: Ní bhaineann focail fhaire, sonraí iomlána íocaíochta ná tacair mhóra sonraí leis an seisiún. Stóráil an méid atá riachtanach don cheangal amháin, mar shampla ID úsáideora agus róil.
- Cearta ón seisiún amháin: An té is riarthóir é, ba cheart é a sheiceáil i gcoinne an bhunachair sonraí le gníomhartha criticiúla. Seachas sin fanann cearta a baineadh i bhfeidhm go dtí go dtéann an seisiún in éag.
- ID seisiúin sa seoladh: Críochnaíonn ID in URLanna i logaí, i stair bhrabhsálaí agus i sonraí Referer. Cuireann
use_only_cookiesagususe_trans_sid = 0cosc air sin. - Gan deireadh leis an seisiún: Mura bhfuil teorainn ama easpa gníomhaíochta ann, fanann riarthóir logáilte isteach gan teorainn ar ríomhaire comhroinnte.
- HTTPS aitheanta go mícheart taobh thiar de phróicsaí: Má chríochnaíonn an criptiú ag an gcothromaitheoir ualaigh, caithfidh an feidhmchlár é sin a bheith ar eolas aige. Seachas sin, d'fhéadfadh sé fianáin a shocrú gan bratach
Secure.
Tar éis teagmhais slándála baineann sé leis freisin gach seisiún atá ann cheana a chaitheamh amach. Is éasca é sin a dhéanamh trí inneachar chomhadlann na seisiún a scriosadh nó ainm an tseisiúin a athrú. Ansin caithfidh gach úsáideoir logáil isteach as an nua, agus níl aon luach le seisiúin ghoidte.
Conas a chabhraíonn PHP SOS go nithiúil?
- Seiceálaimid socruithe seisiún, bratacha fianán agus láithreacha stórála ar gach suíomh gréasáin ar fhreastalaí agus doiciméadaímid na luachanna atá i bhfeidhm i ndáiríre.
- Cuirimid bearta idirthréimhseacha PHP2Shell i bhfeidhm do gach linn, atosaímid na hoibrithe ar bhealach rialaithe agus cruthaímid an toradh.
- Scarann muid suíomhanna le linnte agus cosáin seisiún ar leith mar chuid den chruatú freastalaí.
- Do fhorbairtí féin seiceálaimid logáil isteach, logáil amach agus athrú seisiúin sa chód agus molaimid athruithe nithiúla.
Ceisteanna coitianta
Cad is Session-Hijacking ann?
Le Session-Hijacking glacann ionsaitheoir seisiún úsáideora logáilte isteach air féin trí ID seisiúin an úsáideora sin a fháil. Leis an ID is é an t-úsáideoir sin é don fheidhmchlár, gan an focal faire a bheith ar eolas aige. Déanann bratacha fianáin slána agus ré ghearr é seo i bhfad níos deacra.
Cén fáth a gcaithfear an ID seisiúin a ghiniúint as an nua tar éis logáil isteach?
Má fhanann an ID mar a bhí roimh agus tar éis logáil isteach, d'fhéadfadh ID a bhí ar eolas roimhe sin nó a cuireadh isteach bailí a bheith ann tar éis an logála isteach. Giniúnn session_regenerate_id(true) ID nua agus caitheann sé an seanchinn amach.
An féidir liom session.upload_progress.enabled a mhúchadh trí ini_set()?
Ní féidir, ní leor sin de réir php.net. Baineann an socrú le php.ini, leis an linn FPM nó le cumraíocht an fhreastalaí, ní le ini_set() nó le .user.ini. Ansin ní mór gach oibrí PHP a atosú.
Cá háit ar cheart comhaid seisiúin a stóráil?
I gcomhadlann lasmuigh den fhréamhchomhadlann ghréasáin nach bhfuil cead ach ag úsáideoir na linne PHP ábhartha í a léamh. Ar fhreastalaithe le roinnt suíomhanna gréasáin, ba cheart comhadlann seisiún ar leith a bheith ag gach suíomh.