Pregunta

Actualmente estoy usando este proceso para Desinfectar/Filtro de comentarios introducidos por los usuarios ->
Este se utiliza para quitar barras...y

 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);
    }

A continuación, el comentario va a través de esta función para desinfectar los datos...

   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);   
    }

Después de esto, se va directamente a la base de datos mediante declaración preparada..

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;
                    }
            }
        }

Yo sólo quería saber si este es lo suficientemente seguro o si sus otras alternativas mejores...Gracias

¿Fue útil?

Solución

No hay que escribir su propio código HTML sanitizer.Podrás crear XSS agujeros.

Si usted va a escribir su propia cuenta, al menos ejecutar el ha.ckers.org xss smoketests en contra de ella

Entre esas pruebas, y la htmlpurifier comparación de los filtros, usted debería ser capaz de obtener una buena idea de lo complicado saneamiento html es -- y por qué usted debe dejar a los profesionales.

Otros consejos

La cosa más importante al pensar en el almacenamiento de datos a una base de datos para escapar de él ;el uso de mysql_real_escape_string, o mysqli_real_escape_string, o PDO::quote, dependiendo de la base de datos que estás usando (o otras funciones de oracle/pg/...)

Otra solución sería el uso de declaraciones preparadas (ver mysqli::prepare y/o PDO::prepare - esas no son compatibles con el viejo mysql_* de extensión), en la que se tratará de escapar de datos en su lugar ;-)


Cuando el pensamiento acerca de la salida de HTML, tiene dos soluciones :

  • aceptar HTML y el uso de algunas biblioteca como HTMLPurifier a filtro/limpiar ;esto permitirá especificar exactamente qué etiquetas y atributos son permitidos, y le dará limpio y HTML válido como de salida.
  • intente quitar HTML, como son doinig, no siempre funcionan bien (lo que si se olvida algún caso especial ?)
  • escapar de HTML, con htmlentities o htmlspecialchars :no necesariamente en busca de niza, pero el resultado se verá como en la entrada del usuario.

Me gustaría ir con la primera o la última solución ;el tuyo se siente más "peligroso", pero eso es sólo un sentimiento ^^ (la idea general es "no reinventar la rueda")

Su magia cotizaciones de manejo es buena, aunque si usted cree obtener los parámetros de las citas que usted necesita para stripslashes las claves también.:)

Como para la tira de etiquetas, usted está mejor con un verdadero filtro HTML de la biblioteca.Hay tantos giros y vueltas involucrados con html que simplemente no debería confiar en nada de lo que usted acaba de hacer una vez y olvidarse.La gente pasa el tiempo haciendo esas HTML filtros para utilizar su trabajo para su ventaja.

Como para "directamente a la base de datos", bien en los parámetros vinculados, seguro, eso es genial.De forma segura puede poner cualquier cosa en un obligado parámetro.En una cadena con comillas, espero que se escape el resultado.

Escapar de todos los personajes cuando puting en la base de datos.Al recuperar y mostrar asegúrese de escape html de formato tales como <sometag> por lo que muestra en lugar de ser tratados como código.

PHP tiene poco conocido pero potente construido en el saneamiento de las funciones.Me gustaría recomendar el uso de ellos:

Filtro de entrada en PHP

filter_input y filter_var

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top