Evitar inyecciones SQL al mostrar datos de forma segura

  • Autor Autor ivan455
  • Fecha de inicio Fecha de inicio
ivan455

ivan455

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Lo único que hago es mostrar datos de 1 tabla con 2 columnas en una pagina del admin en wp pero he leído que se tiene que usar el "prepare" para evita las inyecciones sql, así que tengo la duda si necesito implementarlo en este ejemplo que solo ocupo leer los datos y ademas no uso nada de entradas, si lo dejo asi no me podrían hacer inyeccion sql?

PHP:
$registros = $wpdb->get_results("SELECT fgc_error, id_post_error FROM wp_post_error");

echo "Registro #1. id: " . $registros[0]->fgc_error . ", post_error: " . $registros[0]->id_post_error . "<br/>";
 
Última edición:
$registros es una variable indefensa y por ende inyectable.

lo mejor es proteger todas las variables declaradas, para ello puedes hacer un array al principio con todas las variables en null(sin asignar nada) y declaradas como protegidas
 
$registros es una variable indefensa y por ende inyectable.

lo mejor es proteger todas las variables declaradas, para ello puedes hacer un array al principio con todas las variables en null(sin asignar nada) y declaradas como protegidas

A no, la variable esa solo es para mostrar lo que se obtiene de la db

PHP:
$registros = $wpdb->get_results("SELECT fgc_error, id_post_error FROM wp_post_error");

echo "Registro #1. id: " . $registros[0]->fgc_error . ", post_error: " . $registros[0]->id_post_error . "<br/>";

Pero quiero saber si así como esta este código es inyectable? si es así como podría usar el "prepare" si no tengo ninguna entrada como post, get

y lo que dices como podría hacerlo?, seguiré investigando
 
es vulnerable, pero es dificil, se puede hacer si sabes el nombre de la variable explotarla.

es algo sencillo creas una clase o un arreglo y dentro todas tus variables filtradas (con tu metodo de proteccion) ejemplo

class Registros

declara uso privado y local
declara uso del constructor
declara otra cosa

function GetRegistros(){

// tus datos

return $variable

}


Solo debes protegerlas y listo

Aunque no se si en php 7.0 o nuevas version esto sea necesario.

creo que no es necesario si es asi, estas protegido porque no recibes datos. si es como antes no esta protegida porque personas con malas intenciones pueden modificar variables declaradas.
 
Gracias leí sobre esto y de algo sirve pero no estoy satisfecho xd seguiré investigando grandes de todos modos
 
Amigo te dejo un ejemplo de como usar prepare, si te da cierto nivel de protecccion contras las inyecciones sql, si es una preocupacion real que tienes es una de las maneras que te ayudara a dificultarlo, en definitiva recomiendo aplicarlo

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
// aqui en el bind el "sss" indica que los tres parametros son string si son enteros usas i ,doubles d , blobs usas b, una letra para cada //parametro
$stmt->bind_param("sss", $firstname, $lastname, $email);

//luego de hacer el bind puedes ejecutar cuantas sentencias quieras usando el bloque siguiente luego cierra conexion

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();
 
Amigo te dejo un ejemplo de como usar prepare, si te da cierto nivel de protecccion contras las inyecciones sql, si es una preocupacion real que tienes es una de las maneras que te ayudara a dificultarlo, en definitiva recomiendo aplicarlo

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
// aqui en el bind el "sss" indica que los tres parametros son string si son enteros usas i ,doubles d , blobs usas b, una letra para cada //parametro
$stmt->bind_param("sss", $firstname, $lastname, $email);

//luego de hacer el bind puedes ejecutar cuantas sentencias quieras usando el bloque siguiente luego cierra conexion

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

GRACIAS!!!! al final encontre lo que buscaba, cuando se hace una consulta no se ocupa el prepare!! yo creía que si
 
Excelente amigo! Qué siga el php entonces!
 
Las personas que se dedican a tronar los sistemas, saben que hacer con cualquier mínima información que descuides. Lo mejor es que siempre resguardes la privacidad de cualquier variable aunque tu creas que es indefensa. Por otra parte, no recuerdo como se usa el prepare pero el uso de frameworks muchas veces te ayuda a salvaguardar la integridad de los datos. Esa puede ser otra opción
 
Atrás
Arriba