Hola Estimados/as. Junto con saludar me gustaría recurrir a su experiencia en inyección de bases de datos sql. Resulta que tengo que impedir que se pueda realizar una inyección SQL en una base de datos SQLite. Me piden ocupar específicamente el uso de prepared
statements.
Ejemplo:
El código que tengo (que funciona por cierto) es:
Me imprime por pantalla los datos del rut ingresado por medio del link del navegador. Pero como sabrán los más experimentados, a este código facilmente se le puede poner una inyección sql.
He encontrado código como el siguiente:
El cual ocupa el método de prepare statements para evitar la injección SQL en una base de datos SQLite, pero no puedo adaptarlo al código que yo tengo. Cada cambio que le hago me lanza un error por pantalla.
Hasta el momento mi principal duda es qué pongo dentro del PDO en ---new PDO('sqlite:/path/to/database.sdb');---
Si bien la base de datos que ocupo se llama navegadorcito.db, cada vez que pongo ese nombre ahí salta un error al cargar el archivo en el navegador.
Ojala me pudieran dar una mano para entender qué pasa.
Agradecido de antemano por leer esto, me despido.
statements.
Ejemplo:
Código (sql) [Seleccionar]
"SELECT * FROM Alumno WHERE rut = :rut"
El código que tengo (que funciona por cierto) es:
Código (sql) [Seleccionar]
define("SQLITE_DB_PATH", "navegadorcito.db");
$connection = new SQLite3(SQLITE_DB_PATH) or die("No se pudo Conectar con la base de Datos");
$sqlStr = "SELECT * FROM Alumno WHERE rut = " . $_GET["rut"];
echo $sqlStr;
$connection->query($sqlStr);
$query = $connection->query($sqlStr);
while($fila = $query->fetchArray()) {
print_r($fila);
echo "<br/>";
}
Me imprime por pantalla los datos del rut ingresado por medio del link del navegador. Pero como sabrán los más experimentados, a este código facilmente se le puede poner una inyección sql.
He encontrado código como el siguiente:
Código (sql) [Seleccionar]
//Connect this creates a new PDO object
$db = new PDO('sqlite:/path/to/database.sdb');
//Build your sql query with parameters :field
$sql = "SELECT * FROM sometable WHERE someCol=:field";
//Prepare the above query
$statement = $db->prepare($sql);
//Bind the value received from the form or such with the parameter place holder
$statement->bindParam(':field', $_POST['someVal']);
//Execute the prepared query
$statement->execute();
//Fetch the result
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
//Treat the result as a pure array
foreach ($result as $row){
//do something
}
El cual ocupa el método de prepare statements para evitar la injección SQL en una base de datos SQLite, pero no puedo adaptarlo al código que yo tengo. Cada cambio que le hago me lanza un error por pantalla.
Hasta el momento mi principal duda es qué pongo dentro del PDO en ---new PDO('sqlite:/path/to/database.sdb');---
Si bien la base de datos que ocupo se llama navegadorcito.db, cada vez que pongo ese nombre ahí salta un error al cargar el archivo en el navegador.
Ojala me pudieran dar una mano para entender qué pasa.
Agradecido de antemano por leer esto, me despido.