IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ošetření speciálních znaků u nickname

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
idc
Člen
Avatar
idc:30.11.2013 20:13

Ahoj, rozhoduji se, jestli při registraci mám povolit speciální znaky jako jsou <>&@ atp.. (Samozřejmě u nickname). Pokud je povolím, uživatel si bude moc založit nickname typu <h1>uzivatel</h1> a tím narušit mou stránku. Proto přemýšlím nad funkcí htmlspecialchars. Ovšem pokud jí použiji, uživatel dostane zcela jiný název. Můj dotaz z ní:
Zakázat speciální znaky, nebo je nějaký způsob na jejich povolení bez jejich změnění na &alt nebo &gt. Díky za odpověď.

 
Odpovědět
30.11.2013 20:13
Avatar
Snorlax
Tvůrce
Avatar
Snorlax:30.11.2013 20:16

zkus použít funkci StrTr, třeba tou to nějak půjde

Nahoru Odpovědět
30.11.2013 20:16
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
idc
Člen
Avatar
idc:30.11.2013 20:21

Zkusil jsem a jde to skvěle. Jen jaké znaky mám zadat do pole. Myslíš, že stačí < > /. Nebo ještě nějaké?

 
Nahoru Odpovědět
30.11.2013 20:21
Avatar
Kit
Tvůrce
Avatar
Odpovídá na idc
Kit:30.11.2013 20:22

Před vložením do databáze provedeš před starým způsobem query:

$nickname = mysql_real_escape_string($_POST['nickname']);

Výstup nickname do HTML:

echo htmlspecialchars($nickname);

Víc to řešit nemusíš. Uživatel <h1>uzivatel</h1> se zobrazí včetně HTML značek, stránku tedy nenaruší.

Nahoru Odpovědět
30.11.2013 20:22
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
idc
Člen
Avatar
idc:30.11.2013 20:29

Dobře a pokud používám PDO? Je nějaká alternativa za mysql_real_es­cape_string? Nebo stačí pouze prepare?

 
Nahoru Odpovědět
30.11.2013 20:29
Avatar
Snorlax
Tvůrce
Avatar
Odpovídá na idc
Snorlax:30.11.2013 20:35

tak záleží co jim povolíš ty že... pro jistotu bych jim povolil jen písmena, čísla, tečku a pomlčku. víc nepotřebujou

Nahoru Odpovědět
30.11.2013 20:35
Kdo chce pochopit, pochopí. Kdo dělá že chce pochopit, může pouze dělat, že pochopil...
Avatar
idc
Člen
Avatar
idc:30.11.2013 20:38

Bylo by to bezpečnější. Ale zde na devbooku jsou také povolené speciální znaky a vše jde v pohodě.

 
Nahoru Odpovědět
30.11.2013 20:38
Avatar
Kit
Tvůrce
Avatar
Odpovídá na idc
Kit:30.11.2013 20:39

Ano, stačí prepare:

$prep = $pdo->prepare("INSERT INTO uzivatel (nickname) VALUES (?)");
$prep->execute(array($_POST['nickname']));

Alternativou je $pdo->quote($string); Doplňuje i správné apostrofy podle typu otevřené databáze. Má se však dávat přednost $pdo->prepare().

Nahoru Odpovědět
30.11.2013 20:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
idc
Člen
Avatar
Odpovídá na Kit
idc:30.11.2013 20:44

Oukej, díky moc :)

 
Nahoru Odpovědět
30.11.2013 20:44
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 9 zpráv z 9.