Usando PHP, ¿cuál es la mejor manera de almacenar los caracteres especiales (como la siguiente) en un MSQUL base de datos, para evitar las inyecciones.

« " ' é à ù

Esto es como yo lo hago ahora:

$book_text=$_POST['book_text'];
$book_text=htmlentities($book_text, "ENT_QUOTES");
$query=//DB query to insert the text

A continuación:

$query=//DB query to select the text
$fetch=//The fetch of $book_text
$book_text=html_entity_decode($book_text);

De esta manera, todos los de mi texto es el formato en entidades HTML. Pero creo que este tiene una gran cantidad de espacio de base de datos. Así que, ¿hay una mejor manera?

utf8 es tu amigo
El "ENT_QUOTES" necesita ser ENT_QUOTES (sin comillas), ya que PHP es una constante predefinida. Y yo pensaba que usted puede colocar en crudo, en la base de datos y cuando se quiere hacer eco de utilizar htmlentities

OriginalEl autor Antonio Ciccia | 2012-04-11

4 Comentarios

  1. 6

    Uso utf8 de codificación para almacenar estos valores.

    Para evitar inyecciones uso mysql_real_escape_string() (o declaraciones preparadas).

    Para proteger de XSS uso htmlspecialchars.

    utf8 en la intercalación de base de datos?
    utf8 como columnas de la tabla de codificación
    usted no puede mysql_real_escape_string() no es comparable con sentencias preparadas. Esta función es evitar las inyecciones, y no pueden contra ellos solos.

    OriginalEl autor Botanick

  2. 1

    Parece que tu pregunta puede ser generalizada para la manipulación y el almacenamiento UTF8 con PHP y MySQL.

    Para estar a salvo de las inyecciones de SQL, usted debe utilizar las instrucciones preparadas. El mysqli y PDO los conductores tanto el apoyo de ellos.

    Declaraciones preparadas son automáticamente citado por el conductor, así que usted no necesita preocuparse acerca de esto.

    Sus tablas de base de datos debe ser creado con el conjunto de caracteres utf8 y la utf8_general_ci de intercalación. Estas de mi.cnf configuración de asegurar que su servidor MySQL se ejecuta UTF8 través de:

    [mysqld]
    default-character-set=utf8
    default-collation=utf8_general_ci
    character-set-server=utf8
    collation-server=utf8_general_ci
    init-connect='SET NAMES utf8'
    
    [client]
    default-character-set=utf8

    Ser conscientes de que PHP es generalmente inconsciente de UTF-8, por lo que debe tener cuidado al utilizar cualquiera de los iconv o mbstring bibliotecas para manejo de cadenas de caracteres. Ver PHPWACT para una buena visión general.

    Asegurarse de que PHP interno es el conjunto de caracteres que se establece en unicode

    iconv_set_encoding('internal_encoding', 'UTF-8');
    mb_internal_encoding('UTF-8');

    También debe asegurarse de que el navegador conoce la codificación mediante el envío de cualquiera de los el encabezado correcto o la adición de un <meta> etiqueta de caracteres.

    Que debe hacerlo.

    OriginalEl autor jokkedk

  3. 0

    Tu pregunta es una excelente colección de confusiones. Se las arregló para confundir todo.

    Vamos a tratar de resolverlo.

    Usando PHP, ¿cuál es la mejor manera de almacenar los caracteres especiales (como la siguiente) en un MSQUL base de datos, para evitar las inyecciones.

    Estos son incomparables asuntos. El almacenamiento de caracteres especiales es una cosa y evitar las inyecciones es otra. completamente diferente.

    $book_text=htmlentities($book_text, "ENT_QUOTES");

    esto es más divertido. aunque el propósito de proteger a sus consultas, que en realidad no hace nada. Porque en lugar de constante ENT_QUOTES que el valor es 3 utiliza la cadena de ENT_QUOTES que el valor numérico es 0, por lo tanto, de establecer ninguna bandera.

    Pero incluso si se establece este indicador correctamente, no protege automáticamente a usted. Porque una inyección de código no pueden contener caracteres especiales.

    Evitar las inyecciones, usted tiene que seguir todo el conjunto de reglas, no una simple función de «make_my_data_safe()». No hay una varita mágica.

    Ver esta mi respuesta para los detalles.

    Como para el specialchars, es muy sencillo. El único problema de que no hay NINGÚN sólido conjunto de caracteres especiales. Hay diferentes caracteres especiales para los diferentes ambientes.

    • ‘ tienen un significado para la base de datos y HTML
    • <> tienen significado para el HTML sólo
    • é à – tienen significado para el HTML solo, depende de la codificación.

    usted tiene que utilizar diferentes reglas de formato para cada caso. Diferentes, no uno solo para todos.

    utilizar é à – chars con HTML, tiene que establecer la correcta encabezado HTTP.
    para utilizar é à – con la base de datos tiene que establecer su tabla de codificación en utf-8 y de la conexión de la codificación a utf 8.

    $book_text=htmlentities($book_text, «ENT_QUOTES»); fue un error en la publicación aquí. En mi archivo php que fue de $book_text=htmlentities($book_text, ENT_QUOTES);

    OriginalEl autor Your Common Sense

Dejar respuesta

Please enter your comment!
Please enter your name here