NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
michal Čepelák:1.1.2018 16:52

Zdravím,
mám dotaz na zkušenější, mám formulář, který potom ukládám do databáze, přes PDO pomocí wrapperu tady z itnetwork.

<?php
if (isset($_POST["odeslat"])){
 Db::connect();
$sql = Db::query('INSERT INTO test (text) VALUES (?)' , $_POST['text'] );
header("Location: index.php");
die;
}

<form method="POST">
<input name="text"  type="text" />
<input name="odeslat" type="submit" />

</form>

Je to pouze příklad jak to používám u většiny formulářů.

Děkuji za upozornění co mám špatně.

 
Odpovědět
1.1.2018 16:52
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na michal Čepelák
Petr Čech:1.1.2018 18:55

Tak IMHO je lepší vyhnout se čistému PHP a použít nějaký framework (třeba Nette), co tohle řeší za tebe a nemusíš se ptát, jestli je to bezpečné, pokud dodržuješ konvence.
Ale tohle se zdá být celkem bezpečné, ale samozřejmě se to dá víc opevnit, kdybys chtěl (většina ale bude overkill)

  • Nikde nevidím kód pro authentikaci toho, kdo může co kam ukládat. Určitě není dobrý nápad ukládat do databáze všechno, co ti kdokoliv pošle - když udělám bota, co bude v cyklu posílat ten formulář, dopadne to tak, že ti dojde místo na serveru :P - opět důvod, proč použít framework, tam se to prostě nestane.
  • Tady to asi není tak důležité, ale u kritických částí (třeba mazání uživatelů) není špatné bránit se proti CSFR . Toho se docílí buď pomocí toho, že vyhážeš všechny requesty, co nemají stejného http referera, ale to se dá obejít (někdy). Lepší je chránit se pomocí jednorázových tokenů . Tohle za tebe opět může řešit framework velice jednoduše a efektivně.
  • Neošetřuješ, jestli kód neobsahuje HTML. Co se stane, když ti pošlu </div> ? Nejspíš by se rozsypal layout. Je dobré ten vstup prohnat přes htmlspecialchars(), případně pokud chceš akceptovat HTML, použít něco jako http://htmlpurifier.org/ , co to uklidí tak, aby ti to nerozbilo layout
  • Můžeš přidat recaptchu, ale to vážně není potřeba u ničeho, co už dělá přihlášený uživatel. Když ale necháváš třeba anonymní uživatele psát komentáře, není to špatný nápad
  • K ošetření HTML vstupu patří i ochrana proti XSS. Napsal jsem to jako extra bod, protože to je extrémně důležité - když se ti rozsype layout na jedné stránce, nic moc se nestalo. Ale když to třeba všem návštěvníkům ukradne cookies, je to docela dost zlé.

Nic moc dalšího mě nenapadá, možná ještě někdo něco přidá.

Nahoru Odpovědět
1.1.2018 18:55
the cake is a lie
Avatar
Odpovídá na Petr Čech
michal Čepelák:1.1.2018 19:02

takže by mohlo pomoci změnit kód takle?

<?php
if (isset($_POST["odeslat"])){
$text=htmlspecialchars($_POST['text'],ENT_QUOTES);
 Db::connect();
$sql = Db::query('INSERT INTO test (text) VALUES (?)' , $text );
header("Location: index.php");
die;
}
?>
<form method="POST">
<input name="text"  type="text" />
<input name="odeslat" type="submit" />

</form>

děkuji

 
Nahoru Odpovědět
1.1.2018 19:02
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na michal Čepelák
Petr Čech:1.1.2018 19:06

Ano, pomohlo, ale tím samozřejmě řešíš jen jeden problém :D (ale ten největší)

Nahoru Odpovědět
1.1.2018 19:06
the cake is a lie
Avatar
Odpovídá na Petr Čech
michal Čepelák:1.1.2018 19:08

jedná se o formulář, který se dá vyplnit pouze po přihlášení registrováného uživatele, neregistrovaní ho nevidí

 
Nahoru Odpovědět
1.1.2018 19:08
Avatar
Petr Čech
Tvůrce
Avatar
Odpovídá na michal Čepelák
Petr Čech:1.1.2018 19:11

Ok, tak potom je to asi OK. Jen bys měl vědět o tom, že existuje ochrana proti CSFR (dá se to použít třeba i na odkazy, není to jen o formulářích).

Nahoru Odpovědět
1.1.2018 19:11
the cake is a lie
Avatar
Odpovídá na Petr Čech
michal Čepelák:1.1.2018 19:12

dobré vědět děkuji za rady

 
Nahoru Odpovědět
1.1.2018 19:12
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.