No es suficiente, no. Ejemplo de barra invertida:
<script>
var param1 = '{{ param1 }}'; var param2 = '{{ param2 }}';
</script>
param1=\¶m2=;alert(1)//
<script>
var param1 = '\'; var param2 = ';alert(1)//';
</script>
Sin mencionar que sus datos no sobrevivirán intactos:
<script>
var param1 = '<';
alert(param1); // Shows up as <, not <
</script>
Las líneas nuevas ( \r
, \n
, \u2028
, \u2029
) también pueden romper una cadena de JavaScript, aunque probablemente sea raro que eso cree una vulnerabilidad, ya que es invariablemente un error de sintaxis. Si absolutamente necesita poner la entrada del usuario en una variable en una línea inline <script>
inline, recomendaría la codificación JSON seguida de un reemplazo de </
con <\/
y <!
con <\!
. Sin embargo, la mejor manera es usar codificación HTML confiable fuera del script:
<div id="my-information" data-something="{{ param1 }}"></div>
<script>
var param1 = document.getElementById('my-information').getAttribute('data-something');
</script>
No tener scripts dinámicos le permite implementar CSP sólidos.