Non è sufficiente, no. Esempio di backslash contrived:
<script>
var param1 = '{{ param1 }}'; var param2 = '{{ param2 }}';
</script>
param1=\¶m2=;alert(1)//
<script>
var param1 = '\'; var param2 = ';alert(1)//';
</script>
Per non parlare del fatto che i tuoi dati non sopravviveranno intatti:
<script>
var param1 = '<';
alert(param1); // Shows up as <, not <
</script>
Le nuove righe ( \r
, \n
, \u2028
, \u2029
) possono anche rompere una stringa JavaScript, sebbene sia probabilmente raro che ciò crei una vulnerabilità, poiché è sempre un errore di sintassi. Se devi assolutamente inserire l'input dell'utente in una variabile inline <script>
inline, ti consigliamo di codificare JSON seguito da una sostituzione di </
con <\/
e <!
con <\!
. Il modo migliore, tuttavia, è utilizzare una codifica HTML affidabile al di fuori dello script:
<div id="my-information" data-something="{{ param1 }}"></div>
<script>
var param1 = document.getElementById('my-information').getAttribute('data-something');
</script>
Non avere script dinamici ti consente di implementare CSP efficaci.