2010-10-29 13 views
2

Je fais un CMS qui peut être étendu par des développeurs tiers. Dans le passé, j'ai eu des problèmes avec les développeurs débutants ignorant la sécurité tous ensemble. Quand ils mettent leurs modules sur mon site Web, ils compromettent potentiellement les sites Web des utilisateurs.PHP - Désinfecter toutes les données?

Je souhaite créer un objet globals. Cela écrase tous les globaux avec une copie aseptisée. Cela pourrait causer des problèmes, donc cet objet fournira également une option pour obtenir des données non anonymes. De cette façon, par défaut, les développeurs pourraient théoriquement faire quelque chose comme ça et son effet ne serait pas aussi mauvais qu'il le serait en général. (Il est évident que ce serait encore potentiellement causer des problèmes mais les tables ne seront pas supprimées et les données ne seront pas exposés.)

mysql_query("INSERT INTO users (`name`) VALUES ('{$_POST['name']}')"); 

Cela ne protège pas contre les développeurs qui tentent délibérément de briser les choses. Cependant, cela aidera à éliminer les erreurs de base.

L'objet final doit être accédé comme suit.

$_POST['key']; // Provides Sanitized version of the post key. 
$obj->post('key'); // Provides Sanitized version of the post key. 
$obj->post_raw('key'); // Provide unsanitized version of the post key. 

Que pensent les gens de cette approche? Y a-t-il une fonction éprouvée de «fuite à tous» qui circule pour atteindre cet objectif?

Répondre

2

Vous parlez essentiellement de réimplémenter magic_quotes_gpc. Ça ne s'est pas très bien passé quand Zend l'a fait.

Les plus gros problèmes sont 1) les différentes formes de protection des données sont nécessaires pour les différents contextes, et 2) si quelqu'un est trop un noob pour faire la sécurité des données élémentaires, ils sont certainement trop d'un noob à comprendre à quelles données votre mécanisme de protection automatique a été appliqué et ce qu'il n'a pas fait. (Ils vont chercher des données à partir d'endroits que votre mécanisme ne peut ou ne peut pas toucher, prenez ceci comme donné.)

+2

Magic Quotes n'est * pas * une solution complète! En fait, ils impliquent plutôt une fausse sécurité. – Gumbo

+0

Tout à fait.Les citations magiques sont peut-être le plus grand échec de PHP, ce qui en dit long. – chaos

1

Non, c'est vraiment difficile d'avoir une fonction de désinfection générique. C'est toujours spécifique à l'utilisation. Et laissez-moi vous conseille donc quelque chose d'autre:

http://sourceforge.net/p/php7framework/wiki/input/

Il remplace essentiellement les superglobales $ _GET, $ _POST avec des objets. Cela empêche l'accès brut et vous obtenez des notifications ou des erreurs de journal si aucun filtre approprié n'est utilisé. Vous devez toujours penser à quel filtre utiliser, mais au moins cette méthode peut être utilisée pour contraindre les co-développeurs à passer quelques secondes pour y réfléchir. En outre, il est vraiment facile à appliquer:

$_GET->text["comment"] 

mysql_query("SELECT '{$_REQUEST->sql[field]}'"); 

$_POST->nocontrol->utf7->xss->text["text"]; 

Il est également possible de prédéfinir des listes de filtres pour des noms de variables d'entrée spécifiques. Ou définissez un filtre pour tous les anciens accès au tableau avec $_POST->xss->nocontrol->always(); Il faut s'habituer, mais c'est vraiment l'API la plus simple possible et destinée uniquement aux cas que vous décrivez.

0

La sécurité est un sujet très compliqué et délicat à mon humble avis.

Je ne suis pas sûr si vous devriez même permettre un accès non sécurisé aux données. Je ne ferais accès qu'aux contenus aseptisés, et j'appliquerais également l'utilisation des instructions préparées.

Questions connexes