Maison >développement back-end >tutoriel php >Sécurité PHP - sortie d'échappement
Une autre base de la sécurité des applications Web consiste à échapper à la sortie ou à encoder des caractères spéciaux pour garantir que la signification originale reste inchangée. Par exemple, O'Reilly doit être échappé vers O'Reilly avant d'être envoyé à la base de données MySQL. La barre oblique inverse avant le guillemet simple signifie que le guillemet simple fait partie des données elles-mêmes, et non de leur signification originale.
La sortie d'échappement à laquelle je fais référence est divisée en trois étapes :
l Reconnaître la sortie
l peut faire la distinction entre les données échappées et non échappées 🎜> Il est nécessaire d'échapper uniquement aux données filtrées. Bien que l’échappement prévienne de nombreuses vulnérabilités de sécurité courantes, cela ne remplace pas le filtrage des entrées. Les données contaminées doivent d’abord être filtrées, puis échappées.
Lors de l'échappement d'une sortie, vous devez d'abord identifier la sortie. Souvent, c’est beaucoup plus simple que de reconnaître une entrée, car cela dépend de l’action que vous effectuez. Par exemple, lorsque vous reconnaissez la sortie du client, vous pouvez rechercher les déclarations suivantes dans le code : >
En tant que développeur d'applications, vous devez savoir chaque endroit qui produit vers des systèmes externes. Ils constituent la sortie.
Tout comme le filtrage, le processus d'échappement varie en fonction de la situation. Le filtrage est effectué différemment pour différents types de données, et l'échappement s'effectue différemment selon le système vers lequel vous transférez les informations.
Il existe des fonctions intégrées disponibles dans PHP pour échapper à certaines cibles de sortie courantes, notamment les clients, les bases de données et les URL. Si vous comptez écrire votre propre algorithme, il est important d’être infaillible. Il est nécessaire de trouver une liste fiable et complète des caractères spéciaux dans le système étranger et de la manière dont ils sont représentés afin que les données soient préservées plutôt que traduites.
echo print printf <?=La cible de sortie la plus courante est le client, en utilisant des htmlentities( ) est le meilleur moyen d'échapper aux données avant de les envoyer. Comme les autres fonctions de chaîne, son entrée est une chaîne, qui est traitée et sortie. Mais en utilisant des entités html( ) est de spécifier ses deux paramètres facultatifs : la manière d'échapper les guillemets (le deuxième paramètre) et le jeu de caractères (le troisième paramètre). La méthode d'échappement des guillemets doit être spécifiée comme ENT_QUOTES. Son but est d'échapper à la fois aux guillemets simples et aux guillemets doubles. C'est la plus complète. Le paramètre de jeu de caractères doit correspondre au jeu de caractères utilisé par la page.
Afin de distinguer si les données ont été échappées, je recommande quand même de définir un mécanisme de dénomination. Pour la sortie des données échappées vers le client, j'utilise le tableau $html pour le stockage. Les données sont d'abord initialisées dans un tableau vide pour enregistrer toutes les données filtrées et échappées.
CODE :
Conseils
fonction htmlspecialchars() et htmlentities( ) les fonctions sont fondamentalement les mêmes, leurs définitions de paramètres sont exactement les mêmes, sauf que l'échappement de htmlentities() est plus approfondi.
En fournissant le nom d'utilisateur au client via $html['username'], vous pouvez vous assurer que les caractères spéciaux ne seront pas mal interprétés par le navigateur. Si le nom d’utilisateur ne contient que des lettres et des chiffres, l’échappement n’est en réalité pas nécessaire, mais cela reflète le principe de défense en profondeur. Échapper à toute sortie est une très bonne habitude et peut considérablement améliorer la sécurité de votre logiciel.
<?php $html = array( ); $html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$html['username']}.</p>"; ?>Une autre destination de sortie courante est une base de données. Si possible, vous devez utiliser les fonctions intégrées de PHP pour échapper aux données de l'instruction SQL. Pour les utilisateurs de MySQL, la meilleure fonction d'échappement est mysql_real_escape_string( ). Si la base de données que vous utilisez ne dispose pas des fonctions d'échappement intégrées de PHP, addlashes() est le dernier recours.
L'exemple suivant illustre la technique d'échappement correcte pour la base de données MySQL :
CODE :
<?php $mysql = array( ); $mysql['username'] = mysql_real_escape_string($clean['username']); $sql = "SELECT * FROM profile WHERE username = '{$mysql['username']}'"; $result = mysql_query($sql); ?>
以上就是PHP安全-输出转义的内容,更多相关内容请关注PHP中文网(www.php.cn)!