Autor Zpráva
Kuman
Profil *
Zdravím, Chtěl bych se zeptat absolutně všech na všechny rady které my můžete dát ohledně zabezpečení mého php pře hacknutím a dostáním se do databáze no prostě vše, jediné co znám je mysqli_conn close :XD xD Díky


zkrátka jak zabezpečit mou stránku všelijak a se vším všudy :D
lionel messi
Profil
Kuman:
Výborný prehľad nájdeš na Bezpečnost webových stránek (od 3. podnadpisu sa všetko týka aj PHP). Odporúčam si článok poriadne preštudovať, vyskúšať uvedené útoky i obranu proti nim (ideálne na vlastných stránkach) a až v prípade nejasností sa pýtať.
Kuman
Profil *
OK díky moc
Keeehi
Profil
Dobrý článek pro začátek. Určitě je potřeba o jednotlivých technikách načíst více. Taky tam nejsou a ani nemohou být vypsány všechny. A ač si Str4wberryho velmi vážím, i on tam má nepřesnosti. Takže si informace ověřuj z více zdrojů.

Ta nepřesnost je u SQL injection. Jen stringy se mají ošetřovat s mysql_real_escape_strings. Třeba u čísel je to k ničemu a vůbec to nepomůže.
Str4wberry
Profil
Třeba u čísel je to k ničemu a vůbec to nepomůže.

Jak to myslíš? Když očekávám číslo a někdo mi podstrčí „' OR ''='“, tak mi přece mysql_real_escape_string pomůže velmi.
Kubo2
Profil
Str4wberry:
Když očekávám číslo a někdo mi podstrčí ‚' OR ''='‘, tak mi přece mysql_real_escape_string pomůže velmi.

V prípade, že očakávaš číslo, mal by si sa touto skutočnosťou zaoberať už pri server-side validácii dát a negenerovať z týchto (hoci aj escapovaných) nevalidných dát nutne nevalidný databázový dotaz, tobôž nie ho ešte posielať proti databáze.
Taps
Profil
Kubo2, Str4wberry:
Tuším, že pro čísla je nutné použít funkci intval
Amunak
Profil
Na druhou stranu ale escapovat všechna data snad ničemu nevadí. Když tam uživatel zadá validní číslo, tak projde, a pokud zadá text, stejně se mu musí vynadat. Myslím, že escapovat všechno je fajn už proto, že to docela spolehlivě zabraňuje SQL injection nehledě na to, jakou další validací pak data prochází.
snazimse
Profil
Str4wberry:
Když očekávám číslo a někdo mi podstrčí ‚' OR ''='‘,

Nestačí funkce? is_integer
Amunak
Profil
snazimse:
Nestačí, data vytažená z $_POST i $_GET jsou vždy typu string, takže is_int() vrátí false.
Kubo2
Profil
snazimse, Amunak:

Stačí funkcia. is_numeric
Keeehi
Profil
Str4wberry:
Jak to myslíš? Když očekávám číslo a někdo mi podstrčí ‚' OR ''='‘, tak mi přece mysql_real_escape_string pomůže velmi.
Problém je, že ti tam jako útočník pošlu 1 or 1=1 a jelikož tam apostrofy nejsou tak ti to vůbec nepomůže.

U čísel je nejjednodušší přetypování. (int)$nebezpecnaPromenna

Kuman:
Taky bude prospěšné, když budeš sledovat Michala Špačka.
snazimse
Profil
Kubo2:
Stačí funkcia. is_numeric

Tak tak pardon, tohle jsem myslel.
Jan Kozák
Profil
Amunak: „pokud zadá text, stejně se mu musí vynadat.
Kubo2: „Stačí funkcia. is_numeric
snazimse: „Tak tak pardon, tohle jsem myslel.
„Ty jeden zatracený pablbe! Jak sis mohl dovolit blbě zkopírovat číslo i s mezerou a tečkou?! Mohl jsem to sice na číslo přetypovat a dostal bych, co potřebuji, ale já si řekl ne! Víš, zlato, bylo dost opovážlivé mě takto nehorázně provokovat, když mám v databázi uloženy tvé osobní údaje! Jo jo, uděláš to ještě jednou a s kámošema programátorama ti přijdeme vyspravit ciferník!“

Tato hláška se hodí do série k dalším:
- „Nebylo správně vyplněné uživatelské jméno nebo heslo. Ale neprozradíme ti, jestli uživatelské jméno nebylo náhodou správně. Zkus to znovu, máš ještě dva pokusy tuto hodinu.“
- „Kombinace zadaného uživatelského jména a hesla neodpovídá uloženým záznamům. Nápověda: při registraci jsme požadovali heslo o délce minimálně 8 znaků, z čehož nejméně 5 písmen mělo být malých, minimálně 5 velkých, heslo mělo dále obsahovat minimálně 5 číslic, 5 znaků s diakritikou, 5 speciálních symbolů, z toho mělo být minimálně 5 znaků obarvených a 5 podtržených.“
- mysqli_query($pripojeni,"SELECT pocet_navstev+1 FROM pocet_navstev") OR die("SELHALA DATAB?ZE!!!");exit();exit();die();vypnoutUzivateliMonitor();
- „Máme pro Vás dobrou a špatnou zprávu. Špatná - Vaši objednávku se nepodařilo uložit. Dobrá - Košík jsme Vám vysypali úspěšně.“
- „Parse error: syntax error, unexpected '}' in /var/www/clients/client1/web1/web/index.php on line 1.“
Amunak
Profil
Jan Kozák:
Když mluvím o vynadání při zadání něčeho, co mysqli_real_escape_string oescapuje, asi tím nemyslím desetinnou tečku nebo čárku. A když říkám vynadat, nemyslím tím úplně přesně to, co jsi napsal...

Jo a jen tak mimochodem - is_numeric je právě jedna z funkcí, které desetinná tečka nevadí. Kdybych to chtěl udělat "správně", ve vstupních datech nahradím čárky tečkma (přeci jen jsme v česku), pak to zkusím projet is_numeric a případně provedu další kontroly krajních hodnot. Když mi tam uživatel nacpe "ahoj", slušně ho požádám, ať tam napíše číslo.
Jan Kozák
Profil
Amunak:
asi tím nemyslím desetinnou tečku nebo čárku
To nejspíš ne. Já však psal o tečce a mezeře, což je standardní způsob, kterým se oddělují věty, proto nejde o nijak vzácný jev, že se kombinace těchto dvou znaků v položce na čísla objeví. Is_numeric vrátí false, přestože jsi schopen bez problémů s takovou hodnotou pracovat. Když někdo do políčka, kam se má zadávat kvantita veličiny, vloží i její kvalitu (třeba místo desítky napíše 10 kg), můžeš údaj zpracovat navzdory záporné logické hodnotě z is_numeric.

Jo a jen tak mimochodem - is_numeric je právě jedna z funkcí, které desetinná tečka nevadí.
To je dobře, ale pak jí vadí desetinná čárka, mezera za číslicí, číselná hodnota doplněná velkým káčkem následovaným čéčkem nebo čárkou a pomlčkou… Zatímco hodnotu „0534“, která třeba u množství nebo id moc nedává smysl, odešle do DB, kde se pochopí jako „534“. Vždyť naprosto stejně by mohla aplikace přistupovat k hodnotě zadané: „534 Kč“. Proč by měla nula na začátku projít bez připomínek, když mezera na konci je problém? Jde o stejně obskurní, (ne)bezpečné hodnoty, na které by patřil shodný přístup.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: