Tipsai PHP pradinukams [I]

Tikiuosi pradėti tipsų dalinimą pradedantiems PHP pradinukams. Tai nebus developerio blog:as, tiesiog šiaip naudingi patarimai iš savo, kaip PHP programuotojo patirties.

1 Tipsas (saugumas). Noriu pasidalinti kolegos atradimu. Jokiu būdu nedarykite formų, kurių action atributas yra $_SERVER['PHP_SELF']. Suprantu, kad tai yra be galo patogu (nereikia daryti jokių redirektų, etc.), tačiau toks “sprendimas” palieka XSS Type 1 skylę jūsų puslapyje. Kodėl? Todėl, kad šis auto-globalus kintamasis savyje laiko ne tik skripto pavadinimą, tačiau viską, kas eina adreso eilutėje (pabandykite prirašyti "><script>alert(1);</script><form action=").

2 Tipsas (optimizacija). Situacija: jums reikia atvaizduoti kelis sąrašus viename konteineryje (tebūnie tai <div> konteineris) tačiau tik tuo atveju, jeigu bent vienas iš sąrašų nėra tuščias ir prieš kiekvieną sąrašą atvaizduoti kokią nors antraštę (tarkime sąrašo pavadinimą) bei visą sąrašą talpinti į savo konteinerį (vidinį <div>). Savaime aišku – reiktų iš pradžių patikrinti visus masyvus su empty() funkciją (paprastas if($masyvas) netiks, nes mes nenorime provokuoti E_ALL) po to vidiniame konteineryje reiktų vėl tikrinti atskirai kiekvieną masyvą su ta pačia !empty funkcija. Čia man ir iškilo problema, nes visada buvau greito ir optimizuoto kodo fanas. Taigi pirmoje sąlygoje (kur yra tikrinami visi masyvai) šiek tiek pakeičiame kodą: if ($yraSarasas01 = !empty($Sarasas01) || $yraSarasas02 = !empty($Sarasas02) ...). Šioje sąlygoje kiekvienam $yraSarasasNN kintamajam priskirs sąrašo “buvimo” reikšmę (true arba false). Tada jau sąlygos viduje mums nebereikės kiekvienam sąrašui vėl kviesti empty() funkcijos ir užteks patikrinti tik aititinkamą $yraSarasasNN kintamąjį (if ($yraSarasas) {...}) ko pasekoje atitinkamas sąrašas arba bus arba nebus atvaizduotas.

3 responses to “Tipsai PHP pradinukams [I]”

  1. Sergej 'ZaZa' Kurakin

    Šaip, pranešimą apie tą klaidą radau vieno iš “security” tinklapių pranešimose. Berods pranešime apie tai, kad WordPress turi tą skilute paieškos formoje.

  2. Eimantas

    na tai vistiek skaitosi kaip tavo atradimas. nesvarbu kur ,)

  3. Lucy

    Dėl 2 “tipso”. Su PHP šitaip elgtis negalima, nes greitai prieisi liepto galą dėl “short-circuit” problemos. O vėliau bugą rasti išvis gali būti sunku.

Leave a Reply