2010-04-16 11 views
7

Tengo un archivo php en mi sitio y me conecto a db, obtengo algunos registros y los incluyo en el mismo archivo.fragmento de código php para evitar la piratería

mysql_connect("localhost", "blabla", "blabla") or die(mysql_error()); 
mysql_select_db("blabla") or die(mysql_error()); 

$blabla1 = mysql_query("SELECT * FROM gallery WHERE id_cat=1"); 
$blabla2 = mysql_query("SELECT * FROM gallery WHERE id_cat=2"); 
$blabla3 = mysql_query("SELECT * FROM gallery WHERE id_cat=3"); 

Entonces, ¿hay algo que tenga que hacer para la seguridad? Al igual que sql-injection o cualquier otra cosa. no hay nada yendo a url. Es solo www.blabla.com/gallery.php.

Respuesta

10

Este fragmento es perfectamente seguro, porque no hay variables en la cadena de consulta.

Para trabajar de forma segura en caso de que tenga que lidiar con variables un día, ya sea directamente desde el usuario o desde otra fuente de datos, es posible que desee cambiar a una biblioteca mySQL que admita consultas parametrizadas, como PDO . Esos eliminan completamente el peligro de las inyecciones, ya que se encargan de evitar automáticamente la entrada de datos.

Si usted se pega con las funciones mysql_*, asegúrese de que todos los entrantes escapar datos utilizando mysql_real_escape_string() y asegurar que se insertan dentro de un par de comillas simples.

+1

Continúa repitiendo el mismo error una y otra vez. no datos entrantes sino datos. –

+1

@ Col, tienes razón. Corregido –

+1

no hay datos, sino solo datos que se incluirán entre comillas :) Son reglas simples, pero todos siguen olvidándose de una parte. Es por eso que el uso incondicional de consultas parametrizadas considera una mejor práctica. –

4

Siempre que sus consultas no usen parámetros, SQL Injection no es un riesgo. La inyección SQL solo puede ocurrir cuando los usuarios (u otras fuentes) pueden influenciar cualquier cosa que se envíe a la base de datos en SQL, por ejemplo palabras de búsqueda

+0

Inyección En realidad SQL sólo puede ocurrir cuando el ** programador ** no sigue las reglas de sintaxis simples.Y las inyecciones de SQL no tienen nada que ver con la unidad de usuario –

+5

¿Cómo se realizaría una inyección sql sin la entrada de usuario? –

+0

@Col. Schrapnel: un desarrollador siempre debe sanatizar cualquier parámetro antes de usarlo en una consulta. Es cierto que los datos también pueden provenir de otra fuente (por ejemplo, un archivo en el disco duro) – Jasper

2

No hay problemas de seguridad aquí. La inyección de SQL puede ocurrir cuando recibe información del usuario y la utiliza en sus consultas.

1

Este fragmento es seguro, ya que no hay entradas proporcionadas por el usuario en las consultas.

si tiene la entrada de usuario, por ejemplo obteniendo la categoría que debe mostrarse desde la URL o desde POST, debe usar las declaraciones preparadas. esto puede estar seguro incluso con la entrada del usuario. Esto es mucho más seguro que el escapado puro porque el sql se analiza y luego se insertan los parámetros. Esto es mejor para el rendimiento y la entrada de usuario no puede cambiar la estructura de la consulta SQL.

2

si la tabla de la galería contiene alguna entrada del usuario, entonces se puede llevar a cabo algún ataque XSS. Para evitar esto, todas las entradas de usuario que no sean de confianza deben prepararse utilizando la función htmlspecialchars() antes de imprimir en el navegador.

0

La única cosa que puede que desee tener en cuenta, en el supuesto de que el código de conexión está en el script PHP web accesible, es o bien:

  1. mover la conexión de MySQL de la secuencia de comandos y en un archivo fuera de raíz de documentos del sitio

  2. o, utilizar variables de origen externamente (es decir, a partir de un archivo diferente fuera de la raíz del documento) para el nombre de usuario y contraseña en lugar de datos codificados de forma rígida en el guión

De esta forma si, por cualquier razón, el servidor muestra el código en lugar de hacer que el PHP, a continuación, los detalles se mantendrán a salvo de vista

Cuestiones relacionadas