Que pensez-vous que vous pensez tous la solution correcte (lecture: la plus flexible, la plus robuste, la plus robuste, etc.), de rendre l'entrée de l'utilisateur à partir de la sécurité Web pour une utilisation dans diverses parties d'une application Web? De toute évidence, nous pouvons simplement utiliser les fonctions d'assainissement respectives pour chaque contexte (base de données, affichage à l'écran, enregistrer sur le disque, etc.), mais existe-t-il un "motif" général pour la manipulation de données dangereuses et la rendre en sécurité? Y a-t-il un moyen établi d'appliquer le traitement comme dangereux à moins qu'il ne soit bien fait de sécurité? P>
3 Réponses :
Vous ne pouvez pas utiliser une seule méthode pour assainir les données pour toutes les utilisations, mais un bon départ est le suivant: P>
Filtre Var prend un certain nombre de types de données et des supports sur des caractères mauvais (tels que les non-chiffres pour les choses que vous attendez d'être des chiffres) et veille à ce qu'elle est de format valide (adresses IP). P>
Remarque: les adresses e-mail sont beaucoup plus compliquées que la mise en œuvre du filtre_var, par Google autour de la fonction appropriée. P>
Je ne suggérerais pas de l'utiliser jusqu'à ce que vous soyez sur le point de saisir des choses dans une base de données, et il est probablement préférable d'utiliser des déclarations MySQLI préparées de toute façon. P>
Je sais qu'il n'y a pas une seule fonction pour assainir pour tous les contextes. Comme je disais, "évidemment, nous pouvons simplement utiliser les fonctions de désinfection respectives pour chaque contexte ...". Filtre_var semble potentiellement utile. Je suppose que je cherche une solution plus large. Quelque chose de très flexible. Peut-être une sorte de cadre de manutention de données.
Peut-être que vous devriez regarder dans une doctrine comme une doctrine? doctrine-project.org
Je suis plus qu'un peu sceptique qu'un cadre aussi général à usage général pourrait tous deux exister et être moins complexe qu'un langage de programmation. P>
La définition de "sûr" est si différente entre différentes couches p>
considère également les actions lorsque des violations sont découvertes. P>
Peut-être que vous manque votre vision? Avez-vous vu quelque chose qui se rapproche de ce que vous avez à l'esprit? P>
Comme il a déjà été dit, il existe plusieurs éléments à prendre en compte lorsque vous êtes préoccupé par la sécurité Web. Voici quelques principes de base à prendre en compte: P>
Cela signifie donc avoir quelque chose comme Une exception (possible) est pour une chaîne de recherche. Dans ce cas, vous devez assainir, simple comme ça. P>
Si l'utilisateur crée un profil ou une info de téléchargement pour d'autres utilisateurs, vous devez avoir une liste blanche de quel type de données est acceptable ou de sortir tout ce qui pourrait être malveillant. Ceci non seulement pour la sécurité de votre système, mais pour vos autres utilisateurs (voir point suivant.) P>
C'est probablement la chose la plus importante que les consultants en matière de sécurité m'ont souligné. Vous ne pouvez pas simplement compter sur l'apport d'assainissement lorsqu'il est reçu par l'utilisateur. Si vous n'avez pas écrit la sortie vous-même, assurez-vous toujours que la sortie est inoffensive en codant pour tout caractères HTML ou en l'enveloppant dans un XSS est plus facile qu'il ne devrait être et une vraie douleur à couvrir en un paragraphe. Il suffit de mettre, chaque fois que vous créez un formulaire, vous donnez aux utilisateurs l'accès à un script qui gérera les données de formulaire. Si je volais la session de quelqu'un ou le cookie de quelqu'un, je peux maintenant parler au script comme si j'étais sur la page de formulaire. Je connais le type de données qu'il attend et les noms de variables qu'il recherchera. Je peux simplement transmettre ces variables comme si j'étais l'utilisateur et que le script ne peut pas dire la différence. P>
Ce qui précède n'est pas une question d'assainissement mais de validation de l'utilisateur. Mon dernier point est directement lié à cette idée. P>
Si je peux voler le cookie d'un utilisateur, je pourrais peut-être faire plus que faire que l'utilisateur ait une mauvaise journée. Si je remarque que le cookie a une valeur appelée "membre", je peux très facilement modifier cette valeur à "admin". Peut-être que cela ne fonctionnera pas, mais pour de nombreux scripts, j'aurais un accès instantané à toutes les informations de niveau administrateur. P>
Mettez simplement, il n'y a pas un moyen facile de sécuriser un formulaire Web, mais il existe des directeurs de base qui simplifient ce que vous devriez faire et facilitent ainsi le stress de la sécurisation de vos scripts. P>
Une fois de plus pour une bonne mesure: P>
et ne supposez jamais que la liste d'une personne est exhaustive ou parfaite. P> $ variable = $ _post ['user_input'] code>. Pour toute situation comme celle-ci, vous remettez trop de contrôle à l'utilisateur. Si l'entrée affecte une requête de base de données, faites toujours valider les entrées de l'utilisateur contre. Si la requête est pour un nom d'utilisateur, validez-vous sur une liste de bons noms d'utilisateur. Ne faites pas simplement une requête avec la saisie de l'utilisateur déposée directement dans. P>
Je suis spécifiquement intéressée par la sécurité des données pour une utilisation dans l'application après avoir déjà passé une couche de validation simple qui vérifie le format général de la réponse, mais ne cherche pas à dire, à l'injection SQL ou à d'autres menaces. Fondamentalement des moyens de gérer les données qui n'entraîneront pas un comportement significativement destructeur par le programme.
J'avais à l'esprit quelque chose dans le sens de: l'entrée de l'utilisateur peut être enveloppée dans une sorte d'emballage qui empêche le code de l'utiliser de manière dangereuse. Cette contribution pourrait alors alors être débordée d'une manière particulière qui rend difficile la personne de faire quelque chose de manière inconscient quelque chose de dangereux avec elle. Le code utilisant celui-ci devrait s'assurer qu'il a été fait de sécurité pour une utilisation dans le contexte de ce code avant de l'utiliser. Y a-t-il quelque chose comme celui-ci qui a été établi?
Vous mentionnez à un moment donné que vous voulez quelque chose de large et flexible et à un autre point que vous imaginiez un cadre de tri. Donc, vous ne voulez pas une solution simple dans le sens de "faire cette seule chose va frotter l'entrée" tellement "que cette seule chose va déclencher 10 autres choses automatiquement qui vont faire l'apport", est-ce correct? Je n'essaie pas d'être effronté, je ne sais que si vous recherchez une méthode ou un outil. Plus à venir...
L'autre chose me déroutant est ce que vous avez à l'esprit en sécurité. Toutes les conférences, votre commentaire ci-dessus est un peu flou. Vous voulez que quelque chose enveloppe l'entrée (ce qui a du sens et est un bon moyen de la mettre) mais qui essayez-vous en définitive de protéger en emballant et en déballant les données? Voulez-vous éviter l'injection SQL? Requêtes inattendues? XSS? ou sortie du navigateur malveillant?
Anthony Oui, vous êtes correct que je ne veux pas "une chose pour frotter l'entrée" mais plutôt "faire une chose déclenchera 10 autres choses pour frotter automatiquement l'entrée". Ce qui dépendrait de la manière dont l'information est utilisée et ainsi de suite. En ce qui concerne ce que j'essaie de rester en sécurité, tout ce qui précède et tout ce qui est d'autre i>. Je pensais qu'il pourrait y avoir une manière établie pour empêcher que les données ne soient utilisées de manière incorrecte, mais fournissant des installations pour la laisser être utilisées correctement. Sinon, alors c'est une réponse à ma question.