Kako zaštititi formu?

Imam samo jedno polje u formi:

Sad me zanima kako zaštititi formu? Da li napadači mogu ikako zloporabiti formu? Trebala bi prihvaćati samo brojke i slova, a vrijednost se sprema u bazu.

Nisi dao dovoljno podataka za kvalitetan odgovor pa ću odgovoriti generalno.

Da, bot može postati tvoju formu do besvijesti. Front end (najčešće javascript) validacija forme je dobra za ux i fora je, ali svakako moraš raditi back end validaciju jer onaj tko je vješt izbjeći će vrlo lako front end validaciju.

Osim backend validacije pobrini se da sa ‘user input’ podacima napraviš sve što je potrebno da bi se zaštitio od sql injectiona.

Ako se pokušavaš zaštititi od toga da ti botovi submitaju formu prouči captcha. Postoje čak i jednostavnije metode. Npr., dodaš neki input koji ti ne treba. Kao name koristiš neki često korišten keyword (name, email, address), takvo polje sakriješ css-om (ne koristiti type=“hidden”).
Pošto bot ne parsira CSS doživjet će takvo polje kao i svako drugo i popunit će ga sa nekim podacima. A ti kasnije prema tome vidiš da se radilo o botu.

Hint: prouči [HTML5] placeholder atribut. (HTML5 input placeholder Attribute)

Hvala za odgovor. Nije mi na pameti bila zaštita od botova, ali i to je must have, hvala na opisu.

Što se sql injectiona tiče, koji ti podaci trebaju da bi mi mogao reči kako se zaštititi? Dakle ja imam samo to jedno polje, u koje korisnici upisuju tumblr username, koji se sastoji samo od brojki i slova. Zar nije onda dovoljno da samo provjerim da li je upisani string sastavljen samo od slova i brojki?

Hvala puno.

Jeste, dovoljno je da provjeriš je li upisani string sastavljen isključivo od brojki i slova, ali svejedno bi bilo dobro raditi front-end validaciju sa JS-om jer u protivnom ti bot može slati 532523 formi iako će konstantno dobivati grešku od tebe.

Ja osobno izbjegavam korištenje captche (ne zato jer neki botovi mogu i to progutati) zato jer više volim korištenje pitanja za provjeru, poput “Koji je glavni grad Hrvatske?”, “Koliko je tri puta četiri?”, “Kako se zove najpopularnija internet tražilica?” itd.

Ma ne želim zamarati krajnjeg korisnika, dakle cilj je sigurnost forme bez ikakvih upita korisniku :slight_smile: Dakle dovoljno je da provjerim, ok hvala.

E a da li je to dovoljno provjeriti prije upisa u bazu ili? Kada treba prekinuti formu ako je upisan invalid znak?

quote=“toniperic” ali svejedno bi bilo dobro raditi front-end validaciju sa JS-om jer u protivnom ti bot može slati 532523 formi iako će konstantno dobivati grešku od tebe.[/quote]Promisli još jednom o ovome. :slight_smile:

Prekidanje js-a čim detektira pogrešan znak ili najkasnije prije submita.

Ali kako provjeriti da li polje sadrži nedozvoljene znakove prije submita, ako korisnik ima isključen js?

xss protection, u phpu provjeravaj ima li nekih non-alphanumeric znakova

Dakle dovoljno bi bilo da na form submit POST metodom pokupim vrijednost polja, provjerim znakove, i ako nađem nedozvoljeni znak, ne napravim ništa?

u loop.u kontrolirati ip.adresu i ako sa iste u nekom vremenskom razdoblju
dodje ponovljeni zahtjev nesto ne stima ?

rekoh: xss protection, da ti ne može niko formulirati html itd, a kad uneseš value u input i stisneš submit, u phpu provjeri znakove i vrati error ako je nešto krivo, ako nije napravi query na bazu (naravno zaštiti taj input value). dodatno ako ne želiš spamanje stavi neku captchu…

eto odgovor na prvi post…

Hvala puno. Kad sve sredim stavim ovdje cijeli kod da pregledate :slight_smile:

stavi si hidden polje u htmlu za timestamp, jer botovi vecinom cim dobiju formu odmah je i submitaju, tako da ako je recimo onda novi timestamp do 5 sekundi onda je bot… to je jedna zastita

php validacija:
-ako spremas u bazu podatke escape string, ako je integer vrijednost pobrinis se da stvarno i dobijes int sa (int)$varijabla
-uvijek escape specijalne html znakove - htmlentities ili htmlspecialchars, svejedno je istu stvar rade, ali htmlentities imaju problema sa utf znakovima
-ako je slucajno login forma, uvijek resetiraj session id, tj trazi novi session id
-ako zelis samo odredjene znakove koristi regular expression provjeru

ovo su neke osnovne zastite, sa javascriptom uvijek radi kasnije ako zelis aktivnu pomoc pri ispunjavanju za korisnika

Pa submit je sama komanda pri dnu js a klikom na botun pozivaš tah js. Kod isključenog js naravno forma je neuporabljiva.

@APazinjan

Provjeru korisnikovog inputa možeš vršiti pomoću sljedećih funkcija

PHP: Ctype Functions - Manual
PHP: Filter Functions - Manual

Ako ova prva dva linka ne zadovoljavaju tvoje potrebe možeš pokušati i regularnim izrazima.
PHP: preg_match - Manual

Za rad s bazom obavezno koristiti parametizirane upite prema bazi.
(PDO i MySQLi ekstenzije podržavaju to).

JS validacija ionako ne služi svrsi previše, al eto… napravi i nju (manje prometa na hostu).

@Gigolo

Wtf?

[quote=“alaca”]
@Gigolo

Wtf?[/quote]

Npr ovo:

a u formi botun je ovako:

Evo kako sam na kraju zaštitio formu.

Forma:

[HTML]


Insert Tumblr username




[/HTML]

JS dio:

jQuery(function() {
        jQuery('#username').keyup(function() {
            if (this.value.match(/[^a-zA-Z0-9]/g)) {
                this.value = this.value.replace(/[^a-zA-Z0-9]/g, '');
            }
        });
    });

PHP dio:

Naravno, email input sam CSS-om sakrio.


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja