2010-03-03 8 views
1

J'ai besoin d'une fonction de filtre pour un projet sur lequel je travaille. Je pense à l'utilisation du purificateur HTML. Cependant, je m'inquiétais de ses performances.Bibliothèque de filtres PHP ou classe

L'un de vous a-t-il utilisé ou utilisé un purificateur HTML? Ou suggérez-vous une autre bibliothèque ou classe avec des fonctionnalités similaires.

Les questions les plus importantes sont les suivantes:

  • utf-8 soutien
  • sécurité XSS
+0

Pourquoi êtes-vous préoccupés par la performance? La validation ponctuelle d'une entrée HTML ne devrait pas être un problème de performance, n'est-ce pas? –

+0

Il semble que le purificateur HTML utilise beaucoup de ressources. Donc, si je l'utilise sur un site qui a beaucoup d'entrée de l'utilisateur. Je crains que cela puisse causer des problèmes. Bien que je ne sois pas sûr. Je me demande comment un site comme stackoverflow.com gère ce genre de choses. – Sinan

Répondre

2

Si vous voulez:

  • Assurez-vous que les balises HTML et les attributs que vous avez spécifié sont autorisés
  • Et make su Si vous obtenez un code HTML valide,

Ensuite, je dirais que HTMLPurifier est le bon outil pour le travail.

Je l'ai utilisé à quelques reprises - et je n'ai jamais entendu parler d'un autre outil qui ferait bien ce genre de choses. Comme une note sur les performances: vous validez/filtrez le HTML quand il est tapé par l'utilisateur, bien sûr?

que je voulais dire:

  • Certains HTML est entrée par l'utilisateur
  • Vous validez/filtre/nettoyer avec htmlpurifier
  • Et vous amassez que HTML propre à la base de données

Et vous n'utilisez pas HTMLPurifier chaque fois que des données HTML sont sorties, n'est-ce pas? Ce serait terrible pour les performances ^^


Oh, aussi: Avez-vous essayé d'activer une cache pour htmlpurifier?

Voir the Cache section, dans la documentation.

0

Si vous recherchez une validation ainsi que des options de filtrage pour les variables, passez à la bibliothèque ci-dessous.

https://github.com/Wixel/GUMP

# Note that filters and validators are separate rule sets and method calls. There is a good reason for this. 

require "gump.class.php"; 

$gump = new GUMP(); 

$_POST = $gump->sanitize($_POST); // You don't have to sanitize, but it's safest to do so. 

$gump->validation_rules(array(
    'username' => 'required|alpha_numeric|max_len,100|min_len,6', 
    'password' => 'required|max_len,100|min_len,6', 
    'email'  => 'required|valid_email', 
    'gender'  => 'required|exact_len,1|contains,m f', 
    'credit_card' => 'required|valid_cc' 
)); 

$gump->filter_rules(array(
    'username' => 'trim|sanitize_string', 
    'password' => 'trim', 
    'email' => 'trim|sanitize_email', 
    'gender' => 'trim', 
    'bio'  => 'noise_words' 
)); 

$validated_data = $gump->run($_POST); 

if($validated_data === false) { 
    echo $gump->get_readable_errors(true); 
} else { 
    print_r($validated_data); // validation successful 
} 
0

En ce qui concerne cross-site scripting (XSS) - De nombreux cadres aider à gérer de diverses façons. Lorsque vous lancez le vôtre ou s'il y a un problème avec XSS, nous pouvons utiliser filter_input_array (disponible en PHP 5> 5.2.0, PHP 7.) Je vais généralement ajouter cet extrait à mon SessionController, car tous les appels passent par là avant tout autre le contrôleur interagit avec les données. De cette manière, toutes les entrées utilisateur sont nettoyées dans un emplacement central. Si cela est fait au début d'un projet ou avant que votre base de données ne soit empoisonnée, vous ne devriez avoir aucun problème au moment de la sortie ...arrête les déchets, les déchets.

/* Prevent XSS input */ 
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING); 
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING); 
/* I prefer not to use $_REQUEST...but for those who do: */ 
$_REQUEST = (array)$_POST + (array)$_GET + (array)$_REQUEST; 

http://php.net/manual/en/function.filter-input-array.php