Jak uvedli jiní, správná odpověď je #2. Nechte to „syrové“, dokud to nebudete potřebovat, a poté odpovídajícím způsobem unikněte.
Abychom upřesnili proč (a zopakuji/shrnu ostatní příspěvky), dovedeme scénář 1 do jeho logického extrému.
Co se stane, když někdo zadá " ' OR 1=1 <other SQL injection> --
". Možná se teď rozhodnete, že protože používáte SQL, měli byste kódovat pro SQL (možná proto, že jste nepoužívali parametrizované příkazy). Takže teď musíte smíchat (nebo se rozhodnout) kódování SQL a HTML.
Najednou se váš šéf rozhodne, že chce také výstup XML. Nyní, aby byl váš vzor konzistentní, musíte pro to také kódovat.
Další CSV - ach ne! Co když jsou v textu uvozovky a čárky? Více útěku!
Hej - co takhle pěkné interaktivní rozhraní AJAX? Nyní pravděpodobně chcete začít odesílat JSON zpět do prohlížeče, takže nyní je třeba vzít v úvahu všechny {, [ atd. POMOC!!
Takže jasně, ukládejte data tak, jak jsou uvedena (samozřejmě s výhradou doménových omezení) a zakódujte je odpovídající vašemu výstupu v době, kdy je potřebujete . Váš výstup není stejný jako vaše data.
Doufám, že tato odpověď není příliš povýšená. Poděkujte ostatním respondentům.