Autor Zpráva
...a
Profil *
Ahoj. Po odeslání formuláře zpracovávám jeho textové inputy v php. Vlastně všechno co přijde v $_POST['hodnota'] pošlu databázi, nic předem neslashuji, to snad obstarává pdo->prepare s použitím "?" a execute. Toto je snad v pořádku že? Problém je když chci poslaná data znovu zobrazit jako předdefinované hodnoty ve formuláři - tam mohu použít addslashes, které nahradí třeba asci-nul a další speciální znaky. Stačí toto ošetření? Pokud vím, tak <> apod. nevadí pokud se to použije uvnitř value="".
...a
Profil *
Hm tak to nestačí. Pro standardní html element v kódu jo, ale pokud to vložim do javascriptu, tak to neprojde:
document.getElementById('hodnota').value = '\\0<script>alert(\'ahoj);</script>';

Evidentně mu vadí znak /, ale proč? Které další znaky nemá javascript rád?
...a
Profil *
Respektive asi vadí jen celá kombinace </script>, ale proč? Vždyť z kontextu vyplívá, že to nechci použít jako ukončovací tag, tak proč se to tak bere?
...a
Profil *
Tak i ostatní tagy se berou jako tagy pokud se to nastaví javascriptem.
<input type="text" id="hodnota" value="</div>"> - toto je v pohodě
<script>document.getElementById('hodnota').value = '</div>';</script> - toto už není v pohodě, protože pokud se v tuto chvíli ješte vykresluje stránka, tak se obsah toho inputu bere jako html tag.
 

Jak teda dostanu jakýkoliv obsah bez htmlspecialchars do toho inputu jako value?
Alphard
Profil
V textarea bude vadit </textarea>apod. Tohle nelze řešit obecně, každý kontext vyžaduje specifické escapování. Tohle dokonale řeší třeba šablony Nette, resp. Latte filter.
...a
Profil *
Před chvílí jsem narazil na nějakou diskusi, kde píšou že stačí escapovat /, protože vadí kombinace znaků </ . Vyzkoušel jsem a zdá se že funguje, zatím jsem nenarazil na kombinaci znaků které by nefungovaly. Tzn. že addslashes + strtr z / na \/ v tomto kontextu stačí?

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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

0