2017-10-03 6 views
0

Nous avons une application Web qui est en cours de régénération massive de code et par conséquent les grands composants obtiennent une révision de sécurité. En tant que tel, nous avons des problèmes avec l'échappement double des entités html.implications de sécurité de l'entité javascript décoder puis encoder

par exemple:

enter image description here Le problème provient de la chaîne i18n'd déjà html codé lorsqu'il est passé à notre widget toast - et le nouveau widget de pain grillé est à nouveau html codant pour les caractères.

La question est, ce qu'il ya des conséquences sur la sécurité de le faire (en code pseudo)

Entities.encode(Entities.decode(string)); 

pour contourner les doubles problèmes de codage alors que nous migrons le massif codebase? Y a-t-il des problèmes associés aux chaînes non codées passant d'abord par le décodage?

+0

Vous ne savez pas exactement comment il pourrait y avoir des «implications sur la sécurité» si vous composez le code? – guest271314

+0

L'encodage des entités permet de rendre le HTML correctement. Cela n'a rien à voir avec la sécurité. – PHPglue

+0

@ guest271314 car les messages peuvent contenir du contenu utilisateur – buggedcom

Répondre

1

Vous devez également concevoir vos pages à encoder au moment où le code est écrit sur la page, ceci vous assure d'encoder le bon contexte et évite le double encodage. Mais il y a des moments où il n'est pas possible de passer en revue tout le code et de corriger cela. Du point de vue de la sécurité, vous obtiendrez un code HTML "sécurisé" (un attaquant ne pourra pas sortir dans un contexte de code). Comme toujours, vous devez vous assurer que vous utilisez l'encodage correct pour le bon contexte et que vous citez vos entités.

Cependant, vous risquez de vous retrouver avec des régressions fonctionnelles. Si les données contenaient à l'origine des caractères codés valides (& lt), ceux-ci apparaîtront maintenant comme leurs équivalents codés (<). Bien sûr, vous le faites probablement pour éviter les régressions du double encodage, donc c'est peut-être un compromis que vous êtes prêt à faire. Vous pouvez également essayer de limiter le décodage d'un ensemble limité de caractères communs, ce qui devrait être sûr tant que vous utilisez l'encodage complet.