Šuplík Honzy Hučína

Skok na navigaci (menu)

Tento blog je v současné době uzavřen.
Pokračování blogu na bloguje.cz jsem zrušil. Pokud budu někdy pokračovat, bude to spíš tady.

Komentovaný článek

Internet a vše kolem
7. 11. 2006

Pro atributy radši uvozovky. U value určitě

Není úplně jedno, jestli hodnoty atributů v (X)HTML uvádět v uvozovkách, nebo v apostrofech. Podle Yuhůa se může obojí (a validátor apostrofy místo uvozovek bez potíží skousne i pro XHTML Strict 1.0), specifikace hovoří jen o uvozovkách. No, každopádně uvozovky přinesou méně potíží. Aspoň tedy u atributu value v prvcích formuláře.

Příklad: mám formulář pro opravu údajů. Z databáze načtu aktuální údaje a chci jimi formulář předvyplnit. A protože jsem cosi slyšel o nebezpečných znacích pro HTML, nezapomenu text prohnat funkcí htmlspecialchars. Zjednodušeně třeba takto:

<?php
$jmeno = htmlspecialchars($jmeno);
?>
<input type='text' name='jmeno' value='<?php echo $jmeno;?>'>

Chytří už vědí, že jméno obsahující apostrof (např. O'Brien) mi nadělá pěknou paseku. Funkce htmlspecialchars totiž standardně změní jen uvozovky, kdežto apostrofy nechá být. Musí se použít htmlspecialchars($jmeno,ENT_QUOTES).

No co, tak přidáme parametr do funkce. Ale někdy se to tak snadno ovlivnit nedá. Používám jednoduchý šablonovací systém HTMLTMPL, který při výstupu sice nebezpečné znaky převádí automaticky, ale na apostrofy prostě kašle (resp. neumím ho donutit, aby nekašlal).

Mít místo apostrofu uvozovky je daleko jistější. Do konstrukce

<?php
$jmeno = htmlspecialchars($jmeno);
?>
<input type="text" name="jmeno" value="<?php echo $jmeno;?>">

se apostrof vpustit nebojím, i když se nepřevede.

Vložit vlastní komentářNávrat k článkuRSS komentářů tohoto článku

Komentáře

[1] 7. 11. 2006, 09:44 – nestojí za řeč

Ten příspěvek je psán v duchu, jakoby nic jinýho než to hnusný starý PHP neexistovalo a všem bylo okamžitě jasný, s čím má dotyčný vlastně problém...

[2] 7. 11. 2006, 10:08 – Věroš Kaplan (Odkaz)

Uvážíme-li, že XHTML je postaveno na XML a podíváme-li se na http://www.w3.org/TR/REC-xml/#NT-AttValue
tak zjistíme, že do XHTML patří pouze a jedině uvozovky...

[3] 7. 11. 2006, 10:18 – LLaik

Automaticky prevod "nebezpecnych" znaku? A co kdyz je nechces "zabezpecit"? To je pak trosku trable, ne? :)

[1] hnusne stare..? Jejda, to zni konstruktivne :)

[4] 7. 11. 2006, 10:20 – Honza Hučín (Odkaz)

Ad [1]: Na PHP článek nestojí. Zkus si místo něho dosadit jiný serverový skriptovací jazyk.

Ad [2]: Díky za upřesnění. V době psaní článku byl bohužel server W3C.org spadlý, takže jsem si to nemohl ověřit.

[5] 7. 11. 2006, 10:22 – Honza Hučín (Odkaz)

Ad [3]: Samozřejmě je možné nepřevádět, k tomu je v HTMLTMPL atribut ESCAPE="NONE". Podstatné, že když se znaky převádějí, pak bez apostrofu.

[6] 7. 11. 2006, 10:33 – Honza Hučín (Odkaz)

A ještě ad [2]: Validátor XHTML Strict 1.0 vezme i apostrofy místo uvozovek, ověřeno.

[7] 7. 11. 2006, 11:17 – dgx (Odkaz)

A není prostě nejjednodušší opravit chybu v HTMLTMPL a opravu poslat i autorovi? Obecně není důvod, proč vše neescapovat vždy s ENT_QUOTES.

[8] 7. 11. 2006, 11:46 – Honza Hučín (Odkaz)

Ad [7]: Řešení to určitě je. Otázkou zůstává, zda nejjednodušší - v daném kontextu se zdá být nejjednodušší psát atributy s uvozovkami místo apostrofů (:
Ale asi udělám obojí. Možná půjde snadno napsat odvozenou třídu (s předělanou metodou pro escapování apostrofů).

[9] 7. 11. 2006, 12:50 – Ondra

Kdyz uz musim rypat :D,... Co pouzit <?php ?

[10] 7. 11. 2006, 13:45 – Honza Hučín (Odkaz)

Ad [9]: Taková zbytečnost, ale tak jo, ať máte radost...:D

[11] 7. 11. 2006, 18:01 – MzK (Odkaz)

V čem je problém v zabezpečení? Jak se toho dá zneužít? Uvozovky se ani nemusí používat, třeba klasické a href=index.html tareget=top...

[12] 14. 11. 2006, 23:49 – Jakub Vrána (Odkaz)

[2] Já tam tedy vidím '"' [^<&"]* '"' | "'" [^<&']* "'", což znamená, že jsou platné uvozovky i apostrofy.

[13] 15. 11. 2006, 08:21 – Věroš Kaplan (Odkaz)

[12] Děkuji za opravu. Aneb jak se ztrapnit snadno a rychle ve 2 lehkých krocích...

1) najít referenci

2) nepřečíst si ji pořádně

[14] 31. 3. 2011, 21:56 – fanky (Odkaz)

díky! solved my case

K tomuto článku není možné vkládat komentáře.

© Honza Hučín 2004–6

Šuplík běží na PIPNI.CZ. Díky!

sber.cermat.cz

RSS Šuplíku

RSS komentářů – souhrnně

U každého článku je samostatný RSS kanál pro komentáře.

Výběr článků

Posledních 10 článků

nebo podle data:

nebo hledání fulltextem:

Archiv všech článků

Poslední komentáře

Zabili mě, parchanti [2]

8. 8. 16:48 | Pepa

Cestou kolem blogu [2]

7. 8. 21:26 | Honza Hučín

Cestou kolem blogu [1]

7. 8. 21:02 | Honza

Vrtulník nad hlavou [3]

6. 8. 14:29 | Pepa

Taková hra na volby [1]

3. 8. 18:29 | Honza

Nejčtenější

Žádné údaje nejsou k dispozici.

O mně

*1967, absolvent MFF UK v Praze (1991)

statistik, analytik, programátor, učitel, hudebník

nyní Ústav pro informace ve vzdělávání

Životopis (RTF)

Napište mi