Ez a szekció lehetővé teszi a felhasználó által írt összes hozzászólás megtekintését. Vedd figyelembe, hogy csak azokba a fórumokba írt hozzászólásokat látod, amelyekhez hozzáférésed van.
Oldalak: [1]
1
SA-MP: Szerverfejlesztés / [MYSQL] UCP / WEBOLDAL v0.1« Dátum: 2013. május 22. - 22:16:31 »
Lenne 1-2 szakmai észrevételem ha megengeded.
Nagyon sok helyen látom ezt: \"...= \'$_SERVER[REMOTE_ADDR]\' WHE...\" Ilyen formát nem szoktunk használni. Helyette: \"...= \'\".$_SERVER[\'REMOTE_ADDR\'].\"\' WHE...\" Ez a kód idõtállósága miatt fontos. Az elõbbi kódrészlet hivatalosan nincsen, és bár még (ebben a verzióban) mûködik, nem tudjuk meddig. Ez minden asszociatív (nem számmal indexelt) tömbnél fontos. Nincs $tomb[elem] csak $tomb[\"elem\"] vagy $tomb[\'elem\']. Még egy idõtállósági dolog (Kis biztonság is) . Ilyen MySql függvényeket nem használunk. Igen, régen csak ez volt és rengeteg minden ezzel van írva, de újabb fejlesztéseknél messzire elkerüljük. A jelenlegi stabil php verzió az 5.4 , ezek a MySql függvények amiktõl hemzseg a kód, a php 5.5-ben már hibaüzeneteket fognak dobni, (régi függvény, kéri hogy használj mást) a jövõben meg teljesen ki lesznek iktatva. Ajánlom: MySqli,PDO (Személy szerint a PDO-t preferálom, illetve nézz utána az elõkészített lekérdezéseknek, PDO és MySqli is támogatja.) A szimpla MySql függvények lecserélése a biztonsági kérdéseket is megvariálja. A mysql_query függvény nem tud egyszerre több parancsot végrehajtani (Pl. nem tudsz egyszerre kiválasztani értékeket és törölni valamit egy lekérdezésben, tárolt eljárások nélkül). A PDO/MySqli viszont igen, ezért azok veszélyesebbek. Természetesen erre is van megoldás. (Elõkészített lekérdezések) Admin függvények egyáltalán nincsenek szûrve. Ez végzetes hiba. Egy laikus/\"bosszúvágyú\" admin bármit megtehet, ha pedig olyan is hozzáférhet a panelhez adminként aki egyébként a szerveren/egyéb helyen nem rendelkezik jogokkal akkor az kellemetlen. Igaz, amíg van mysql_query ami csak 1 lekérdezést küld kicsit nehezebb dolga van (nem töröl instant adatbázist), de tényleg nem kéne ennek a függvénynek ezt a hátrányát biztonsági elõnyként kezelni, pl. lekérések feltételeit meg lehet kerülni könnyedén. Sok kimeneti hibaüzenet szintén nincsen ellátva szûréssel, így azokba gyilkos JavaScript kódokat lehet injectelni. echo \"<div class=\'msgbox\'>$_GET[msg]</div>\"; http://www.php.net/manual/en/function.strip-tags.php http://php.net/manual/en/function.htmlspecialchars.php http://www.php.net/manual/en/function.htmlentities.php Ezzel az ügyeskedéssel a weblapot nem lehet feltörni. Vagyis önmagában nem. Ezzel a módszerrel felhasználókat lehet lopni, anélkül hogy szerencsétlen xy egyáltalán ezt észlelné. (Természetesen nem fejtem ki ) Pontosítok. Csak (bejelentkezett) admin felhasználókat lehet lopni vele. Az admin felületrõl már beszéltünk. Nem egyszerû ezt sem megcsinálni, de meg lehet. if(file_exists(\"pages/$_GET[p].php\")) Kritikus php/szerver sebezhetõségi hiba, beállításoktól függõen. Ezzel a módszerrel tulajdonképpen bármilyen fájlt be tudok ágyazni illetve lefuttatni a php motor segítségével. Mint említettem, ezzel a php.ini-tõl függõen még akár helyben beinjectelhetem magát a php-t és helyben módosíthatom a forrást. (Vagy azt csinálok vele amit akarok) Miután azt futtatok amit akarok, adatbázisom is van. Igen, ott van hogy \"pages/\" az elején illetve a \".php\" a végén, de ezek lényegtelen információk amiket csupán az url-hez fûzött összesen 6 karakterrel el is távolítottam, onnantól meg csak a szûretlen változó van. A file_exists csak azt nézi létezik-e a fájl. Nem érdekli hogy hol van. Ha túl nagy jogköre lenne a szerveren ennek az oldalnak akkor már a szervert lehetne kóstolgatni, onnan meg hátulról minden mást ami rajta van. (Pl. ha nem rendesen beállított hostolt környezetben fut az oldal.) Ez a sebezhetõség függ a php verziójától is. 5.3.4 elõtt azt hiszem veszélyesebb volt, a frissebb php-k mintha már figyelnek a kiterjesztés eltüntetésére, de még sok helyen van 5.3.3 sõt még 5.2 is. Igazából azt se szeretnéd ha bármely php fájl ami csak megtetszene beágyaznék. Ajánlom hogy reguláris kifejezésekkel távolíts el a változóból mindent ami nem betû,esetleg szám. Egy tömbben tárolhatod hogy milyen oldalak vannak (http://php.net/manual/en/function.scandir.php) és ha nem szerepel a tömbben a változó akkor ne jelenítsd meg az oldalt. Stb... Regisztrációnál nem ellenõrzöd az E-Mail cím valódiságát. Simán lehet tolni egy \"a@a\" semmiséggel egy felhasználót, ha rászánnék egy percet bármilyen más karakterlánccal is. A kliens oldali HTML5(ami nálad van)/JavaScript ellenõrzés nem valódi ellenõrzés. Felhasználónév és jelszó hosszát ajánlom korlátozni. (Minimum/maximum) Felhasználónévbe írható karaktereket ajánlom leszûkíteni betûkre/számokra. Egy kis adatbázis tervezési észrevétel. Azoktól a nagybetûktõl az oszlop nevek nagyon menõn néznek ki meg minden. Kár hogy Windows/Linux kompatibilitási gondot okozhatnak. Csak belenéztem a kódba, ezeket nem feltétlenül azért írtam hogy most azonnal javíts/írj át mindent vagy ilyesmi,ócsárolni sem volt szándékom, csupán szerintem ezeket a dolgokat hasznos tudni a jövõbeli projektjeid tervezésénél.
Oldalak: [1]
|