Je sais que des questions similaires ont été posées, mais j'ai du mal à trouver comment le faire. Je suis en train de construire un CMS, plutôt primitif en ce moment, mais c'est comme un exercice d'apprentissage; dans un site de production, je voudrais ...

0
Jack27696 14 mars 2021 à 18:12

1 réponse

Meilleure réponse

Un bon moyen et peu coûteux d'éviter les scripts intersites est de demander à votre programme php de tout autoriser à partir de l'entrée de vos utilisateurs avant de le stocker dans la base de données. Autrement dit, vous souhaitez récupérer cette entrée d'un utilisateur

Hi there sucker! I just hacked your site.
<script>alert('You have been pwned!')</script>

Et convertissez-le en ceci avant de le mettre dans votre base de données.

Hi there sucker! I just hacked your site.
&lt;script&gt;alert('You have been pwned!')&lt;/script&gt;

Lorsque vous passez &lt; à un navigateur, il le rend comme <, mais il ne fait rien d'autre avec.

La fonction htmlentities () peut le faire pour vous. Et, htmlspecialchars_decode () de php peut l'inverser si vous en avez besoin à. Mais vous ne devez pas annuler l'opération sauf si vous devez absolument le faire, par exemple pour charger le document dans un éditeur intégré pour les modifications.

Vous pouvez également choisir d'autoriser le texte fourni par l'utilisateur après l'avoir extrait de votre base de données et avant de l'afficher. Si vous arrivez au point où plusieurs personnes travaillent sur votre code, vous voudrez peut-être faire les deux pour votre sécurité.

Vous pouvez également afficher l'entrée fournie par l'utilisateur dans des balises <pre>content</pre>, qui indiquent au navigateur de simplement restituer le texte et de ne rien faire d'autre avec lui.

(Utilisez le clic droit Inspecter sur cette même page pour voir comment Stack Overflow gère mon exemple malveillant.)

1
O. Jones 14 mars 2021 à 17:31