Question

J'utilise actuellement ce processus pour assainir / filtrer les commentaires entrés par les utilisateurs - >
Celui-ci est utilisé pour effacer les barres obliques ... et

 if (get_magic_quotes_gpc()) {
        function stripslashes_deep($value)
        {
            $value = is_array($value) ?
                        array_map('stripslashes_deep', $value) :
                        stripslashes($value);

            return $value;
        }

        $_POST = array_map('stripslashes_deep', $_POST);
        $_GET = array_map('stripslashes_deep', $_GET);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
        $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
    }

Ensuite, le commentaire passe par cette fonction pour assainir les données ...

   function my_strip_tags($str) {
                $strs=explode('<',$str);
                $res=$strs[0];
                for($i=1;$i<count($strs);$i++)
                {
                    if(!strpos($strs[$i],'>'))
                        $res = $res.'&lt;'.$strs[$i];
                    else
                        $res = $res.'<'.$strs[$i];
                }
             return strip_tags($res);   
    }

Après cela, il entre directement dans la base de données à l'aide d'une instruction préparée.

function add_comment($comment,$type,$update_id,$user_id){
            $query="INSERT INTO comment_updates (updateid,userid,comment) VALUES(?,?,?)";
                if($stmt=$this->conn->prepare($query)) {
                $stmt->bind_param('sss',$update_id,$user_id,$comment);
                $stmt->execute();
                    if($this->conn->affected_rows==1){
                    $stmt->close();
                    return true;
                    }
            }
        }

Je voulais juste savoir si cela est suffisamment sécurisé ou s'il existe d'autres alternatives plus intéressantes ... Merci

Était-ce utile?

La solution

N'écrivez pas votre propre désinfectant HTML. Vous allez créer des trous XSS.

Si vous voulez écrire le vôtre, lancez au moins les ha.ckers.org xss smoketests contre cela

Entre ces tests et la comparaison des filtres htmlpurifier , vous devriez pouvoir vous faire une bonne idée de à quel point la désinfection html est compliquée - et pourquoi vous devriez la laisser aux professionnels.

Autres conseils

Lorsque vous envisagez de stocker des données dans une base de données, le plus important est de les échapper. en utilisant mysql_real_escape_string , ou mysqli_real_escape_string , ou PDO::quote , en fonction de la base de données que vous utilisez (ou d’autres fonctions pour oracle / pg /...)

Une autre solution consisterait à utiliser des instructions préparées (voir mysqli::prepare et / ou PDO::prepare - ils ne sont pas pris en charge par le ancienne mysql_* extension), qui traitera des données sauvegardées chez vous; -)


En ce qui concerne la sortie HTML, vous avez deux solutions:

  • acceptez le code HTML et utilisez des bibliothèques telles que HTMLPurifier pour le filtrer / le nettoyer; cela permettra de spécifier exactement quels tags et attributs sont autorisés, et vous donnera un HTML propre et valide en sortie.
  • essayez de supprimer HTML, comme vous le faites - ne fonctionne pas toujours bien (et si vous oubliez un cas particulier?)
  • échappe au HTML, avec htmlentities ou htmlspecialchars : ne semble pas forcément agréable, mais le résultat ressemblera à celui de l'utilisateur.

Je choisirais la première ou la dernière solution. le vôtre se sent plus " dangereux " - mais ce n’est qu’un sentiment ^^ (l’idée générale étant & "de ne pas réinventer la roue &";)

La gestion de vos guillemets magiques est satisfaisante, mais si vous créez des paramètres avec des guillemets, vous devez également masquer les clés. :)

En ce qui concerne les balises strip, il vaut mieux utiliser une vraie bibliothèque de filtres HTML. Il y a tellement de rebondissements dans le langage HTML que vous ne devriez simplement pas faire confiance à tout ce que vous faites une fois et que vous oubliez. Les utilisateurs passent beaucoup de temps à créer ces filtres HTML, utilisez donc leur travail à votre avantage.

Quant à & "; directement dans la base de données &"; bien dans un paramètre lié, bien sûr, c’est génial. Vous pouvez mettre n'importe quoi dans un paramètre lié en toute sécurité. Dans une chaîne avec des guillemets, j'espère que vous échapperez au résultat.

Échappe à tous les caractères lors de sa mise en base. Lors de la récupération et de l'affichage, veillez à ne pas utiliser le formatage HTML tel que <sometag> pour qu'il s'affiche au lieu d'être traité comme un code.

PHP a des fonctions d’assainissement intégrées peu connues mais puissantes. Je recommanderais de les utiliser:

Filtrage des entrées en PHP

filter_input et filter_var

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