Question

Sortie ou le filtrage d'entrée?

Je vois constamment des gens à écrire « filtre vous entrées », « désinfectez vos entrées », faites des données utilisateur non confiance, mais je suis d'accord que le dernier, où je considère faire confiance à des données externes une mauvaise idée même si elle est interne par rapport au système.

Filtrage d'entrée: Le plus commun que je vois. Prenez les données post formulaire ou toute autre source externe d'informations et de définir certaines limites lors de l'enregistrement, par exemple rendre le texte que du texte, des numéros sont des numéros, que sql est sql valide, que le HTML est HTML valide et qu'il ne contient pas nocif le balisage, et puis vous enregistrez les données « sûres » dans la base de données.

Mais lors de la récupération des données que vous venez d'utiliser les données brutes de la base de données.

A mon avis, les données ne sont jamais vraiment en sécurité. Bien que cela semble facile, il suffit tout filtre vous obtenez des formes et des URL, en réalité, il est beaucoup plus difficile que cela, il peut être sûr pour une langue, mais pas un autre.

Filtrage de sortie: Quand vous faites de cette façon que je sauvegarde les données non altérées brutes, quel qu'il soit, avec des déclarations préparées dans la base de données, puis filtrer le code problématique lors de l'accès aux données, ce qui a ses propres avantages: Cela ajoute une couche entre html et le script côté serveur. que je considère comme la séparation d'accès aux données de toutes sortes.

données sont filtrées en fonction du contexte, par exemple, je peux avoir les données de la base de données présentées dans un document HTML-texte échappé plaine, ou html ou quoi que ce soit partout.

Les inconvénients sont ici que vous ne devez pas oublier d'ajouter le filtrage qui est un peu plus difficile qu'avec filtrage des entrées et il utilise un peu plus CPU lors de la fourniture de données.

Cela ne signifie pas que vous n'avez pas besoin de faire des vérifications de validation, vous faites encore, il est juste que vous ne enregistrez les données filtrées, vous validez et fournir à l'utilisateur un message d'erreur si les données sont en quelque sorte invalide.

Ainsi, au lieu d'aller avec « filtrer vos entrées » peut-être il devrait être « valider vos entrées, filtrer vos sorties ».

dois-je aller avec « validation d'entrée et de filtrage » ou « validation d'entrée et de sortie de filtrage »?

Était-ce utile?

La solution

Il n'y a pas de générique de « filtrage » pour l'entrée et la sortie.

Valider votre entrée, votre sortie échapper. Comment vous faites cela dépend du contexte.

La validation est de faire entrée vous tombe dans les plages sensibles, comme la longueur des chaînes, le numéricité des montants en dollars ou qu'un dossier mise à jour est la propriété de l'utilisateur qui effectue la mise à jour. Ceci est de maintenir la cohérence logique de vos données et empêcher les gens de faire des choses comme la mise à zéro le prix d'un produit qu'ils achètent ou la suppression d'enregistrements, ils ne devraient pas avoir accès. Cela n'a rien à voir avec « filtrer » ou échapper à des caractères spécifiques dans votre entrée.

Escaping est une question de contexte, et ne fait vraiment de sens quand vous faites quelque chose avec des données qui peuvent être empoisonnés en injectant certains caractères. Échapper les caractères HTML dans les données que vous envoyez au navigateur. Caractères d'échappement SQL dans les données que vous envoyez à la base de données. Échapper les guillemets quand vous écrivez des données à l'intérieur des balises <script> JavaScript. Juste être conscient de la façon dont les données que vous avez affaire va être interprété par le système vous passez à et échapper en conséquence.

Autres conseils

La meilleure solution est de filtrer les deux. Faire seulement on fait qu'il est plus probable que vous manquez un cas, et peut vous laisser ouvert à d'autres types d'attaques.

Si vous ne faites le filtrage d'entrée, un attaquant pourrait trouver un moyen de contourner vos entrées et provoquer une vulnérabilité. Cela pourrait être une personne ayant accès à votre base de données la saisie des données manuellement, il pourrait être un téléchargement attaquant un fichier par FTP ou un autre canal qui est pas cochée, ou bien d'autres méthodes.

Si vous ne faites le filtrage de sortie, vous pouvez vous laisser ouvrir à l'injection SQL et d'autres attaques côté serveur.

La meilleure méthode consiste à filtrer vos deux entrées et sorties. Il peut causer plus de charge, mais réduit considérablement le risque d'un attaquant de trouver une vulnérabilité.

Sons comme la sémantique pour moi. De toute façon la chose importante à retenir est de vous assurer que les mauvaises données ne sont pas dans le système.

Faire sortie filtrage à la place du filtrage d'entrée est demandé pour une injection SQL.

text alt

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top