Sigurnost formi

Pozz

Zanima me dali netko od vas provjerava polja u formi, jer se mogu editirat preko mozile na f12 i tako spremit u bazu mislim pogotovo na registraciju.

Imam polje za Zemlju i izvlacim iz baze ime i skracenicu za zastavu zemlje

<div class="form-group">
    <label for="country">Country</label>
      <select name="country" class="form-control" required>
          <option value="">Select country ...</option>
            <?php
               foreach ($cnt as $key) {
                    echo '<option value="'.$key['alpha_2'].', '.$key['name'].'">'.$key['name'].'</option>';
               }
             ?>
      </select>
</div>

I sad on moze da ubaci value=“test, test” i tako mi spremi u bazu. Kako to sprijecit ? Osim da provjeravam dali je value koji je unesen u formu jednak onome u bazi i dali je patern isti ?

Tako moze i za spol, i ostalo

Pa u bazi vjerovatno imaš id svake zemlje, za value stavi id i onda provjeriš dali je id ispravan, sve podatke moraš na serveru provjeravat

A jbt led i sad imas formu veliku, i sta moram provjeravat svako polje jbt led, koje sranje. Jel ima neka zastita ili nesta drugo a da je jednostavno ?

Sve što provjeravaš na client strani, provjeravaš samo da popraviš user experience…tako da kažeš odmah korisniku ako neko polje nije pravilno ispunjeno…itd.
No tu ne stvaraš nikakvu sigurnost jer imaš nebrojeno načina da korisnik pošalje na server ono što on želi poslati.
Tako da na serveru moraš provjeravati polja u svrhu vlastite sigurnosti…da ne dobiješ nekakav SQL injection koji ti pobriše bazu podataka…itd.

No jedna stvar, korisnik koji te želi “napasti” …on nema ništa od toga ako u formu koju si ograničio na 5 slova, pošalje input od 7 slova. (To je samo njegov bed što će mu kasnije faliti ta dva slova, ili će mu biti višak, …ili koje već kontradiktornosti će sam sebi time stvoriti) Tvoj code u startu ne smije biti osjetljiv na takve “sitnice”.

Znači provjera od napada ne treba kontorlirati svaku stavku koju si stvorio radi user experienca, treba samo kontrolirati opasne inpute koji ti mogu naškoditi.
Ako u nekom inputu 7 karaktera umjeto 5 zaista može naškoditi tvome code-u, onda moraš kontrolirati dodatno i tu stavku za neki x input…tj. limitirati na serveru upis od 5 karaktera.

Opasni inputi ti se uglavnom vežu za SQL injection…ili da ti netko prosljedi nekakav javascript code koji će se aktivirati tek kad se ispiše na otvaranju stranice kao komentar npr.
No za takve stvari ne moraš smišljati posebnu kontrolu kod svakog upisa u bazu…dovoljno je imati jednu kontrolnu točku i sve što ti se upisuje u bazu provrtiš kroz tu kontrolnu točku.
E sad, koliko ima sigurnosnih problema koji bi se mogli upisati u bazu osim ovog dvoje što sam gore spomenuo…to nisam siguran. Lopova uvijek bilo…uvijek će biti. Sa razvojem weba se i granica sigurnosti uvijek pomiče…

Zato pametni developeri znaju cemu sluze frameworks i kako ih iskoristiti, sve ostalu u danasnje vrijeme je izmisljanje tople vode.

1 Like

A sto cu koristit framework za mali projekt + jesi ti siguran 100% za forme u bilo kojem frameworku ? Nema sanse

Ne moras koristiti kompletan framework. Npr. Symfony je odlican jel mozes koristiti samo odredjene komponente ne moras koristiti kompletan framework. Imas npr. i FatFree ili Lumen koji su u biti micro frameworks koji dobro dodju u malim projektima, puno toga je tamo rijeseno vec na samom pocetku. Izmedju ostaloga i ono sto tebe muci, a to je form handling.

Ovako to izgleda u Lumenu: http://lumen.laravel.com/docs/validation
ovako u FatFree: http://fatfreeframework.com/audit
a ovako u Symfony: https://symfony.com/doc/current/components/form/introduction.html

Jesam. Siguran sam i da je sigurnije i bolje i od mog i od tvoga rijesenja.

Pozdrav

Pozdrav:)
Nemoj biti lijen sa tim formama, vjeruj mi poslije bude više posla popraviti moguća sranja, nego napraviti malo bolju formu za input nekih podataka. Ne vjeruj nikome tko ispunjava web forme :slight_smile:

Hehe, nisam ljen napravim ja za svaki input i output funkciju da sprijeci bilo kakvu mogucnost da se ubaci neki kod, samo sam za ovo neki dan tek sazno da se moze preko mozile editirat value.

Pa nije browser napravljen po granicama zakona. Praktički bilo tko može napraviti vlastiti browser i s njim submitati forme kakve želi na tvoj page.
Ali nije potrebno da radi svoj browser da te zezne, kad ima nebrojeno drugih načina.
Zato jedino potpunu kontrolu imaš na serveru…nemoj nikad razmišljati dali se na client strani nešto može ili ne može…jer tamo se SVE može što nekome padne na pamet, i ako si da dovoljno truda.

Ok hvala ba savjetu.