Egy weboldal biztonságos kialakítása
Üdv!
Egy olyan weboldalt szeretnék kifejleszteni, amely biztonságos.
Szóval nem lehet könnyen bejutni a rendszerbe, a config.php-ban a jelszót egy hacker config.php scanneléssel ne tudja megnézni stb.
Szóval arról kérnék információt, hogy hogyan építsem fel a weboldalam, hogy az biztonságos legyen?
Mindent amit ezzel kapcsolatba tudni kell, osszátok meg velem légyszives!
válaszaitokat előre is köszönöm :)
■ Egy olyan weboldalt szeretnék kifejleszteni, amely biztonságos.
Szóval nem lehet könnyen bejutni a rendszerbe, a config.php-ban a jelszót egy hacker config.php scanneléssel ne tudja megnézni stb.
Szóval arról kérnék információt, hogy hogyan építsem fel a weboldalam, hogy az biztonságos legyen?
Mindent amit ezzel kapcsolatba tudni kell, osszátok meg velem légyszives!
válaszaitokat előre is köszönöm :)
Biztonsági wrapper funkciók
Hiba amit elküvethetsz például ez:
Hasznos lehet még a referer check amit egy másik kérdésedre írtam.. ;)
A config.php és társainak veszélye egy egészen más probléma. Itt ugyebár a php kiterjesztés miatt nem hézhet bele a fájl forrásába, a veszél főleg az, hogy te elküldöd neki. Ez a fájlkezelés problémaköre. Ha bármilyen fájlhoz hosszáférsz a szerveren, ami nem fix string, hanem valami változó határozza meg, ott mindig alkalmazz ellenőrzést, pontosabban szűrést.
A szűrő lehet átengedő ilyenkor mindent átengedsz, ami nem különösebben tilos. Ez például egy ilyen (ha nincs benne tiltott karakter, akkor átmegy):
Lehet alapból tiltó is a szűrő... Itt az else ágban lesz a tiltás, tehát mindent tiltunk, amiről külön nem jelentjük ki, hogy biztonságos pl:
Itt is le van irva
Pl.: includolt fájlok védelme közvetlen meghivás ellen:
hazsnos lehet
pontosan
config
egy cms-t akarok csinálni, csak nemtom hogy csináljam.
érdemes e az index.php-ba mindent beletenni , (title,meta tagek, stb) vagy mindennek külön php-t csináljak.. vagy nemtudom..
az a lényeg, hogy úgy kell megírni az index-t, hogy váltható téma van , szóval minden témához igazodjon..
próbálkoztam már egy kicsit, de ez még semmi:
cms
Szerintem egyszerűen csak modulokat (include-fájlokat) készíts, jól definiált felelősséggel (melyik modulnak mi a feladata). Azokat a PHP-kep pedig, amik a konkrét (weben látható) oldalt építik fel tedd csak az "eldobható" kategóriába. Ha igazi oldalkat készítesz nem lesz két ugyanolyan. Az egyiken cikkek lesznek, a másikon blogbejegyzések. Az egyiken lesznek rovatok a másikon nem. Az egyiken minden cikkhez kötelező lesz képet felvinni,a másikon nem. Itt a cikkek első 100-100 karakterét szeretnék a címlapon látni, ott különszeretnnek lead-et írni minden cikkhez. És így tovább...
Az, hogy hogyan építs fel egy php-s weboldalt pedig megér egy nem-kis cikksorozatot. Nem mondom, hogy nézz utána, hogyan csinálják az open source projektek (wordpress, drupal), mert tisztelet a kivételnek szörnyűnél szörnyűbb példák vannak. Ha valaki ismer idevágó szakirodalmat én is kíváncsi lennék.
(Mellesleg szerintem eza kérdés már új témába illett volna, mivel abszolút semmi köze a témaindítóhoz...)
cms
Bocsi, az eredeti kérdésre akartam válaszolni nem erre a hozzászólásra... Úgy látszik kéne aludnom egyet :)
vitatkoznék
mvc csak könnyít
amúgy a hozzászólás 2. felével egyetértek.
Nem értem, miért
És nem vagyok híve a „tanuljuk meg, ahogy sikerül, aztán évekig vetkőzzük le a rossz szokásokat” hozzáállásnak.
végleges döntésem
ez a legpraktikusabb , nem? s aakkor nem kell újraírni minden alkalommal..
köszi a válaszokat
nem
html escape
Fontos dolgok
1. Rendszer a docrooton kívül
A rendszer magját, jelszavakat, stb. mind illik a document rooton kívül tárolni, ugyanis egy hibás apache beállítás és az egész történet megy ki a netre. Ez a hiba nem is túl ritka, a Facebooknál is előfordult. Ha a host nem támogatja, keresni kell másik szolgáltatót, van elég host aki támogatja.
2. register_globals, magic_quotes_gpc
Ezeket nem kellene elmondani, de mégis mindig előkerül, ezeket offra illik állítani.
3. escape, escape, escape
Mindig elmondom, mindig előkerül, minden adatot, legyen az MySQL, fájl vagy bármi más escapelni kell. Ezt nem lehet megkerülni, minden modulnál, minden kódrésznél ami valamilyen adatmozgatást végez, ezt végig kell gondolni. Soha, soha, soha ne halaszd el későbbre! Sok mindent el lehet halasztani későbbre, ezt nem.
4. Elfedés
MySQL-t, fájlműveleteket illik elfedni. Ha nem feded el, a fejlesztőnek ott lesz a csábítás, hogy küldjünk be egy nem escapelt queryt.
5. KISS
Keep It Simple Stupid. Az egyszerűbb sokszor jobb.
6. MVC
Ha rendesen el van választva a megjelenéstől a programlogika és a programlogikának minden eleme (create, update, delete, stb) meg van csinálva, kissebb a veszélye annak, hogy valahol gányolás történik.
7. XSS
User adatokat escapelni kell, ld. escapelés. Az nem megoldás, hogy globálisan escapelsz valamit, az adatmozgás céljától függően kell escapelni. Ha nem így teszel, az kb ugyanolyan rossz mint a magic_quotes.
8. hibaüzenetek
Soha, soha, soha ne engedjünk ki SQL vagy PHP hibaüzeneteket a felhasználónak! var_dump és a haverjai még véletlenül se forduljanak elő a kódban!
+1. Gányolás
A biztonsági hibák 99%-a arra vezethető vissza, hogy valahol ad-hoc módon belenőnek fícsörök. Ez nem baj egészen addig, amíg a megfelelő időpontokban visszabontod a rendszert és értelmesen lefejleszted az előzőleg belegányolt dolgokat. Ha ez nem történik, akkor nő és nő és nő a szarhalmaz egészen addig, amíg a nyakadig ér.
+2. RTFM
Nagyon sok szívástól és biztonsági hibától kímélheted meg magad, ha elolvasod a doksit és a hozzá tartozó user commenteket. php.net a legjobb barátod. Angolul. Nem magyarul.
Ennél még valószínűleg lehetne lényeges dolgokat mondani, de ezek a legfontosabbak.
re:fontos dolgok
a weblapom a wwwroot-mappán belül van, és az ilyeneket, amiket ehhez felsoroltál a wwwroot-al egy mappába tegyem?
szóval
wwwroot --> és ebben van az index.php, meg a weblap többi része
config.php
stb..
így gondoltad ezt?
az escapelésnek majd utána nézek,mert fogalmam sincs mi az:)
és köszi a sok információt :)
docroot
Az escapelés tekintetében illik megnézni a mysql_real_escape_string függvényt illetve ha fájlba írsz akkor az addslashes-t vagy hasonló függvényt.
kössz
mostmár remélem boldogulok ;)
ha netán valaki rátalálna késöbb a témára: