2016-08-22 1 views
4

Ceci est un exemple de chaîne que je devrais afficher dans une alerte javascript();alerte php et javascript qui contient une chaîne avec guillemet double

string with "double quote" in it

Parce que cette chaîne peut être modifiée via PHP par mes utilisateurs, il est préférable de prévenir les attaques XSS. Pour faire ainsi dans le HTML de mon document je fais habituellement:

<?php echo(htmlspecialchars($MY_STRING, ENT_QUOTES, 'UTF-8')); ?> 

Cela fonctionne très bien.

Mais maintenant, je viens de remarquer que si je sortie la même chaîne dans une alerte javascript:

<script> 
alert("<?php echo(htmlspecialchars($MY_STRING, ENT_QUOTES, 'UTF-8')); ?>"); 
</script> 

La sortie de l'alerte dans ce cas est:

string with &quot;double quote&quot; in it

Quelle est la meilleur moyen de sortir les guillemets dans une alerte, mais aussi préventig XSS injection?

+2

'' * de addslashes * devrait faire le travail ... vous pourriez – CD001

+0

mettez-le dans un div avant d'alerter: http: // stackoverfl ow.com/a/14937257/1921862 – Fels

Répondre

3

ENT_NOQUOTES drapeau assure toutes les citations »et« ne sont pas échappés et le addslashes leur échappe pour la js fonction d'alerte

$string = 'string<< with "double quote" in it'; 
echo htmlentities(addslashes($string), ENT_NOQUOTES); 

Sortie:.

string&lt;&lt; with \"double quote\" in it 

permet de ranger vos citations et échappe les balises HTML malveillants

+0

C'est une sortie non lisible. L'auteur veut probablement: avec "double citation": comme une sortie –

+0

@FranklinRivero Eh bien, il pourrait utiliser '' 'addcslashes''' au lieu de' '' addslashes''' – iyop45

0

Tout à l'intérieur d'alerte est traitée comme une chaîne et ne sera pas exécutée, de sorte que vous n'obtenir une attaque XSS si vous assurez-vous qu'il est un singlestring par juste échapper à la "

pour

une alerte vous n'avez pas besoin d'utiliser htmlspecialchars, vous pouvez simplement le faire comme ceci:

<script> 
    alert("<?php echo addslashes($MY_STRING); ?>"); 
</script> 
(strip_tags (...))
+2

sauf si la chaîne est quelque chose comme: '"); document.location ('http://somekinkypornsitewithdonkeys.com'); // ' – CD001

+0

Content que vous ayez édité la réponse pour ajouter' addslashes';) – CD001

+0

Ouais, travail en cours, écriture et test. ça marche, pas de XSS là, enlever le vote? –