István mai cikkéből kiderül, hogyan tehetjük biztonságossá a PHP scripteket.
Az adatbázishoz kapcsolódó PHP scriptek komoly sebezhetőséget jelentenek, ha nem kezeljük le a SQL injection támadásokat.
Nézzünk erre egy példát:
Tegyük fel, hogy van egy egyszerű bejelentkező felületünk, ami a users táblából olvas ki adatokat, és ezek alapján dönti el, hogy a felhasználó jogosult-e a belépésre.
A felhasználónév text mezőjének legyen username a neve (vagy ID-je). A beírt nevet a rendszer a következőképp ellenőrzi:
$sql=’select password from users where
db_username=\’’.$_POST[’username’].’\’’;
$query=mysql_query($sql);
$result=mysql_result($query,0,0);
if($result==$_POST[’password]){
… bejelenzkezés metódusai …
}
else print ’Hibás felhasználónév, vagy jelszó.’
Abban az esetben, ha a támadó a username mezőbe egy pontosvesszőt tesz, lezárja az SQL utasítást, és a pontosvessző utáni részt már egy másik utasításként értelmezi. Ekkor a $sql változó valahogy így nézhet ki:
$_POST[’username’] értékét a támadó a következőre állítja: ’akármilyen szöveg ; drop table users;’
$sql változó:
select password from users where db_username=’ akármilyen szöveg’;
drop table users;
Ebben az esetben mindkét SQL utasítás végrehajtódik. a drop table users parancs törli a users táblát.
A megoldás ebben az esetben egyszerű: egy ciklussal meg kell vizsgálni a beviteli mező minden karakterét, és ha ezek közül valamelyik pontosvessző, akkor nem hajtjuk végre a lekérdezést.
$lekerdezes=true;
for($i=0;$i<strlen($_POST[’username’]);$i++){
if($_POST[’username’][$i]==’;’)
$lekerdezes=false;
break;
}
if($lekerdezes){
… lekérdezés metódusai …
}
else print ’Érvénytelen karaktert használt!’;
A következő cikkben majd mélyebben is megismerkedünk az SQL injection védelemmel!
A másik fontos módszer a publikus emailcímek kezelése. Ha egyszerűen kiírjuk az emailcímünket, akkor a spammelő robotok célpontjává válunk. Érdemes kerülni a szokásos email formátumot:
valaki@domain.hu helyett: valaki _kukac_ domain _pont_ hu
Lehet képként megjelenítenünk az emailcímünket, ennek az a hátránya, hogy nem tudják kijelölni, és bemásolni valahova, hanem muszáj begépelni. Gondolkodjunk el, hogy egy idegennek a wendel.sztatovszky@rusradio.gov címet kell begépelnie valahova…
Függetlenül attól, hogy szövegesen, vagy képként jelenítjük meg az emailcímünket, gondoskodnunk kell róla, hogy rákattintva megnyíljon egy levelezőkliens. Ezzel az a baj, hogy a robotok figyelik a html kódban a mailto beállítást, így könnyen azonosítja a címet.
Pl: <a href=”mailto:admin@domain.hu”>Írj ide kattintva!</a>
Ennek kiküszöbölésére érdemes egy kis PHP-s segítséget igénybe venni!
Hozzunk létre egy gombot, amire klikkelve láthatóvá válik az emailcím, különben nem.
Ez azért jó, mert az oldal betöltésénél alapesetben nem látszik semmi, egy embernek kell klikkelnie, hogy láthatóvá váljon. Így a robotok könnyűszerrel kijátszhatóak. Alapesetben a cím helyett érdemes egy sortörést alkalmazni, hogy a weboldalon mindig meglegyen az emailcím sora, nehogy a megjelenés hatására elcsússzanak a táblázataink.
<input type=’submit’ name=’add_sub’ value=’Mutasd az email címet!’>
<?php
if(isset($_POST[’add_sub’]))
print ’<a href=”mailto:admin@domain.hu”>Írj ide kattintva!</a>’;
el
Jó gyakorlást kívánunk!
Használja ki a nyári, nyugodalmasabb időszakot, és szerezzen informatika sikerszakmát a nyári hónapok alatt!
Jelentkezzen a július második felében induló, kiscsoportos, gyakorlat orientált
Akkreditált Webprogramozó Mester, Akkreditált Webdesigner Mester tanfolyamainkra
legkésőbb július 20-ig!
Szerezzen professzionális Webdesigner és Webprogramozó végzettséget egyetlen képzés alatt!
---> Web Artist tanfolyam
Jelentkezzen az induló Web Artist csoportba legkésőbb július 20-ig!
További júliusi képzéseinket itt találja!
Hűs oktatótermekkel, hideg italokkal, és profi, elkötelezett tanárokkal várjuk nyári képzéseinken is!:-)
Netlogi C School
Gyakorlat orientált informatika oktatás rugalmas időbeosztással!
www.netlogi-c.net