Go achomair: XSS i PHP a chosc: ionchódaigh gach aschur de réir a chomhthéacs: htmlspecialchars() do HTML, json_encode() le roghanna cosanta do JavaScript, URLanna seiceáilte do naisc. Glacann teimpléid le huath-escaping cuid mhór de sin díot. Teorannaíonn Content Security Policy agus fianáin HttpOnly an damáiste má fhanann bearna ann fós.
Cén fáth ar cheart Cross-Site Scripting a sheiceáil anois freisin
Tá aird dírithe i nDeireadh Fómhair 2026 ar PHP2Shell, dhá leochaileacht chriticiúla san ateangaire PHP a bhfuil paistí ar fáil dóibh ón 21.10.2026. Tá a lán cuideachtaí ag seiceáil a bhfeidhmchlár gréasáin dá bharr. Is deis mhaith é sin féachaint ar laigí i gcód féin nach gcuireann nuashonrú PHP ceart.
Ceann acu is ea Cross-Site Scripting, XSS i bhfoirm ghairid. Liostaíonn an OWASP Top 10 XSS laistigh den chatagóir Injection. Murab ionann agus bearna sa fhreastalaí, díríonn an t-ionsaí anseo ar chuairteoirí agus ar úsáideoirí do shuímh gréasáin, mar shampla ar chliaint sa siopa nó ar fhostaithe sa chúlchlár.
Is féidir leis na hiarmhairtí a bheith suntasach: seisiúin riarthóirí tógtha, foirmeacha ionramháilte a sheolann sonraí chuig tríú páirtithe, nó inneachar bréige ar do shuíomh gréasáin. Má thógtar cuntas riarthóra, d'fhéadfadh sé leanúint go dtí smacht iomlán ar an bhfeidhmchlár.
Conas a tharlaíonn XSS i bhfeidhmchláir PHP?
Tarlaíonn XSS nuair a aschuireann feidhmchlár sonraí ó fhoinse nach bhfuil iontaofa isteach i leathanach gan iad a sheiceáil. Ní féidir leis an mbrabhsálaí idirdhealú a dhéanamh idir d'inneachar agus cód a cuireadh isteach a thuilleadh agus ritheann sé an dá cheann.
Déantar idirdhealú idir trí fhoirm. Le XSS athchaite tagann an t-inneachar go díreach ón iarratas reatha, mar shampla ó théarma cuardaigh san URL. Le XSS stóráilte tá sé sa bhunachar sonraí, mar shampla i bhfreagra nó i réimse próifíle, agus buaileann sé gach duine a osclaíonn an leathanach. Eascraíonn XSS bunaithe ar DOM i JavaScript an bhrabhsálaí, nuair a scríobhann scripteanna luachanna ón URL isteach sa leathanach.
Níl iontaofa na sonraí go léir nach bhfuil socraithe sa chód: páirceanna foirme, paraiméadair URL, fianáin, ainmneacha comhad, freagraí ó chomhéadain sheachtracha agus inneachar ó do bhunachar sonraí féin a tháinig ón taobh amuigh uair éigin.
Aschur a ionchódú i gceart de réir comhthéacs
Is é an riail is tábhachtaí: ionchódaigh le linn aschuir, agus de réir an áit ina dtéann an luach. Do inneachar HTML agus tréithe idir comharthaí athfhriotail is é htmlspecialchars() an uirlis is fearr. Cuireann feidhm chúnta bheag cosc ar roghanna a dhearmad:
<?php
function e(?string $wert): string
{
return htmlspecialchars($wert ?? '', ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5, 'UTF-8');
}
?>
<h2><?= e($produkt['name']) ?></h2>
<input type="text" name="suche" value="<?= e($_GET['q'] ?? '') ?>">
Teastaíonn uirlisí eile ó chomhthéacsanna eile:
| Comhthéacs | Modh slán |
|---|---|
| Inneachar HTML, tréith idir comharthaí athfhriotail | htmlspecialchars() le ENT_QUOTES agus UTF-8 |
| Sonraí do JavaScript | json_encode() le JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, JSON_HEX_QUOT |
| Paraiméadar in URL | rawurlencode() don luach aonair |
| URL iomlán ó ionchur úsáideora | Seiceáil an scéim, ná ceadaigh ach https agus http, ansin htmlspecialchars() |
| Tréithe gan comharthaí athfhriotail, láimhseálaithe imeachtaí, CSS | seachain, ná cuir luachanna isteach ansin |
Do shonraí a theastaíonn ó script, is minic gurb é tréith sonraí nó bloc JSON an bealach is glaine:
<?php
$daten = json_encode($konfiguration, JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT);
?>
<div id="app" data-konfig="<?= e($daten) ?>"></div>
I JavaScript léann tú an luach ansin tríd an tréith sonraí agus socraíonn tú inneachar le textContent seachas le innerHTML.
Teimpléid, glanadh HTML agus creataí
Ionchódaíonn inneall teimpléad ar nós Twig agus Blade aschuir go huathoibríoch de réir réamhshocraithe. Cuireann sé sin cuid mhór d'earráidí tipiciúla as an áireamh. Bíonn sé contúirteach nuair a mhúchtar an t-iompar sin d'aon turas, mar shampla leis an scagaire raw i Twig nó leis an gcomhréir {!! !!} i Blade. Ba cheart go mbeadh a leithéid d'áiteanna annamh sa chód agus iad a sheiceáil go sonrach le gach athbhreithniú.
Más mian le d'fheidhmchlár HTML ó úsáideoirí a cheadú d'aon turas, mar shampla formáidiú i bhfreagraí nó i gcóras eagarthóireachta, ní leor ionchódú, mar go bhfuil an HTML le taispeáint. Ansin teastaíonn leabharlann ghlanta seiceáilte uait ar nós HTML Purifier, nach ligeann tríd ach liosta seasta d'eilimintí agus de thréithe ceadaithe. De réir taithí tá scagairí féin le sloinn rialta lán de bhearnaí.
Seiceáil réimsí cúlchláir go háirithe. Is minic a dhéantar XSS a mheas faoina luach i radhairc nach bhfeiceann ach riarthóirí, ach buaileann sé go beacht na cuntais leis na cearta is mó.
XSS a aimsiú i gcód atá ann cheana
In fheidhmchláir a d'fhás, ní hé an chéad cheist de ghnáth conas ionchódú i gceart, ach cá háit a ndearnadh dearmad air go dtí seo. Tús pragmatach is ea cuardach ar áiteanna ina n-aschuirtear athróga go díreach:
# Aschuir dhíreacha ar shonraí iarratais
grep -rnE "(echo|print|<\?=)\s*\\\$_(GET|POST|REQUEST|COOKIE|SERVER)" src/ templates/ --include="*.php"
# Uath-escaping múchta i Twig agus Blade
grep -rnE "\|raw|\{!!" templates/ resources/views/
Is tascanna seiceála iad torthaí, ní torthaí críochnaithe. Ní aimsíonn cuardach den chineál sin XSS stóráilte ach go páirteach, mar go dtagann na luachanna ansin ón mbunachar sonraí. Seiceáil dá bhrí sin gach radharc a thaispeánann inneachar ó úsáideoirí: freagraí, próifílí, nótaí orduithe, ticéid tacaíochta. I gcás CMS agus siopaí baineann breiseáin agus téamaí ó thríú páirtithe leis go sainráite, mar go bhfuil cuid mhór den loighic aschuir ansin.
An dara líne chosanta: CSP agus fianáin shlána
Fiú le cód cúramach is féidir áit a fhágáil ar lár. Teorannaíonn dhá bheart an damáiste ansin. Ligeann Content Security Policy don bhrabhsálaí scripteanna ó fhoinsí socraithe amháin a rith agus toirmisceann sí scripteanna leabaithe mura gceadaítear go sainráite iad:
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'"
Tabhair isteach beartas den sórt sin céim ar chéim, ar dtús sa mhód tuairiscithe amháin trí Content-Security-Policy-Report-Only, mar go gcaithfear comhtháthú atá ann cheana le seirbhísí anailíse nó íocaíochta a chur leis de ghnáth. Déanann an treoir Ceanntásca slándála do shuíomhanna gréasáin cur síos ar cheanntásca eile.
Ina theannta sin ba cheart don tréith HttpOnly a bheith ar fhianáin seisiúin, ionas nach féidir le scripteanna iad a léamh. Conas seisiúin a chosaint ar fad, tá sé sa treoir Seisiúin i PHP a chosaint. Déileálann SQL-Injection i PHP a chosc le laige ghaolmhar ar thaobh an bhunachair sonraí.
Conas a chabhraíonn PHP SOS go nithiúil?
- Seiceálaimid teimpléid agus aschuir d'fheidhmchláir le haghaidh ionchódaithe atá ar iarraidh nó mícheart.
- Measaimid torthaí de réir inrochtaineachta agus cuntais lena mbaineann agus léirímid ceartúcháin nithiúla.
- Tugaimid Content Security Policy isteach céim ar chéim, gan feidhmeanna siopa ná íocaíochta a bhuaireamh.
- Tástálaimid arís tar éis an cheartaithe agus doiciméadaímid an toradh.
Déanann an tseirbhís Iniúchadh slándála agus tástáil threáite cur síos ar sheiceáil neamhspleách.
Ceisteanna coitianta
An leor htmlspecialchars in aghaidh XSS?
Do ghnáththéacs in inneachar HTML agus i tréithe idir comharthaí athfhriotail, is leor, má shonraíonn tú ENT_QUOTES agus an tacar carachtar UTF-8. I JavaScript, in URLanna nó i CSS baineann rialacha eile, ansin teastaíonn ionchódú ar leith atá oiriúnach.
Ar cheart dom ionchuir a scagadh le linn stórála nó le linn aschuir?
Ionchódaigh le linn aschuir, de réir na sprice. Ba cheart duit ionchuir a sheiceáil le haghaidh dealraimh nuair a fhaightear iad, mar shampla fad agus formáid. An té nach scagann ach le linn stórála, caillfidh sé sonraí ó fhoinsí eile agus déanann sé úsáid níos déanaí i gcomhthéacsanna eile níos deacra.
Cad a thugann Content Security Policy?
Socraíonn Content Security Policy as cé na foinsí a fhéadfaidh an brabhsálaí scripteanna a luchtú agus a rith. Is féidir léi éifeachtaí bearna XSS a ligeadh tharat a theorannú go suntasach, ach ní chuireann sí ionchódú ceart ina ionad.
Conas a cheadaím formáidiú ar nós trom nó naisc i bhfreagraí?
Úsáid leabharlann seiceáilte um ghlanadh HTML le liosta ceadaithe d'eilimintí agus de thréithe ceadaithe. Tá slonn rialta féin chun scripteanna a bhaint buailte ar earráidí agus níor cheart iad a úsáid.