2010-07-29 6 views
0
function validCleanHtml($unclosedString) 
{ 
    preg_match_all("/<([^\/]\w*)>/", $closedString = $unclosedString, $tags); 
    for ($i = count($tags[1]) - 1; $i >= 0; $i--) 
    { 
     $tag = $tags[1][$i]; 
     if (substr_count($closedString, "</$tag>") < substr_count($closedString, "<$tag>")) 
      $closedString .= "</$tag>"; 
    } 
    $validTags = "<em><strong>"; 
    $validClosedString = strip_tags($closedString, $validTags); 
    return $validClosedString; 

} 

ok ce que je veux est d'activer 2 html, em et fort, est-ce juste sécurisé de xss? sinon comment pouvons-nous le sécuriser?filtrage html sûr avec php?

Répondre

4

Je pense que strip_tags détient la réponse.

http://us2.php.net/strip_tags

Plutôt que de permettre à certains champs, vous pouvez également supprimer ceux que vous ne voulez pas. A savoir: link, style, script, iframe, frame

+0

C'est beaucoup de travail. merci compagnon –

+2

@Adam, s'il vous plaît considérer la réponse de @ jasonbar aussi bien. Il fournit [options de filtrage supérieures] (http://htmlpurifier.org/comparison#striptags) que 'strip_tags'. – Charles

12

Avez-vous regardé des solutions existantes comme htmlpurifier? Vous ne voulez vraiment pas écrire votre propre analyseur HTML - et certainement pas avec les expressions régulières.

+0

Je pense que quelque chose comme ceci est la voie à suivre pour SafeHTML. Je ne pense pas qu'il soit nécessaire de réinventer la roue. C'est exactement ce que je cherchais, même si ce n'est peut-être pas exactement ce que l'affiche originale de cette question cherchait. – FernandoZ