App inventor 2 en español
Cómo programar los teléfonos móviles con Android
mediante App inventor 2 - Juan Antonio Villalpando
--- PHP y MySQL en App Inventor 2 --
Volver al índice del tutorial de PHP y MySQL
____________________________
340D.- App inventor y MySQLi. PHP. POST. SQL Inject. Hack.
- En el tutorial anterior vimos cómo trabajar con MySQLi, PHP y POST.
- Resulta que hay un proceso denominado Inyección SQL (SQL Inject) en el que un usuario con conocimientos puede poner en los casilleros un cierto código y éste código obtener cierta información de la base de datos, incluso borrar una tabla.
- Esta historia es muy gráfica:
- Aquí está la explicación: https://stackoverflow.com/questions/332365/how-does-the-sql-injection-from-the-bobby-tables-xkcd-comic-work/332367#332367
- En el código PHP se encuentra esta línea para insertar el nombre de un estudiante:
INSERT INTO Students VALUES ('$Name')
Pero alguien en vez de insertar su Nombre, escribe esto:
Robert'); DROP TABLE Students; --
Por lo cual la línea se convierte en:
INSERT INTO Students VALUES ( 'Robert'); DROP TABLE Students; -- ')
Es decir, inserta el nombre Robert y además BORRA la tabla Students.
- Esto es lo que se llama SQL Inject.
- Hay varias formas de evitarlo, vamos a ver la que nos indica este tutorial en inglés:
https://websitebeaver.com/prepared-statements-in-php-mysqli-to-prevent-sql-injection
________________________________________________________________
________________________________________________________________
2.- MySQLi + PHP + POST + App Inventor. Evitar SQL Inject.
p340B_mysqli_php_post.aia
(Es la misma aplicación que vimos en el tutorial anterior.)
_________________
- Diseño.
NOTA: Web1 está en Conectividad (no confundir con VisorWeb)
_________________
- Bloques.
_________________
- Archivo PHP. MySQLi. POST. Seguridad Inject SQL.
mysqli_post_segur.php
|
<?php
// Juan Antonio Villalpando
// http://kio4.com/appinventor/340D_appinventor_mysqli_inject.htm
// 1.- IDENTIFICACION nombre de la base, del usuario, clave y servidor
$db_host="localhost";
$db_name="blob";
$db_login="juan";
$db_pswd="contraseña";
// 2.- CONEXION A LA BASE DE DATOS
$link = new mysqli($db_host, $db_login, $db_pswd, $db_name);
if($link->connect_error) {
exit('Error de conexion con la base de datos.');
}
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link->set_charset("utf8mb4");
$boton = $_POST['boton'];
/////////////////////////////// INSERTAR - INSERT ////////////////////////////////////
if ($boton == "btnInsertar"){
$Nombre = $_POST['Nombre'];
$Edad = $_POST['Edad'];
$Ciudad = $_POST['Ciudad'];
$stmt = $link->prepare("INSERT INTO personas (Nombre, Edad, Ciudad) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $Nombre, $Edad, $Ciudad);
$stmt->execute();
$stmt->close();
print("Datos agregados a la base.");
}
/////////////////////////////// BORRAR - DELETE ////////////////////////////////////
if ($boton == "btnBorrar"){
$Nombre = $_POST['Nombre'];
$stmt = $link->prepare("DELETE FROM personas WHERE Nombre = ?");
$stmt->bind_param("s", $Nombre);
$stmt->execute();
$stmt->close();
print("Datos borrados.");
}
////////////////////////////// ACTUALIZAR - UPDATE ///////////////////////////////
if ($boton == "btnActualizar"){
$Nombre = $_POST['Nombre'];
$Edad = $_POST['Edad'];
$Ciudad = $_POST['Ciudad'];
$stmt = $link->prepare("UPDATE personas SET Edad = ?, Ciudad = ? WHERE Nombre = ?");
$stmt->bind_param("sss", $Edad, $Ciudad, $Nombre);
$stmt->execute();
$stmt->close();
print("Datos modificados.");
}
///////////////////// BUSCAR POR NOMBRE - SEARCH BY NAME /////////////////////////////
if ($boton == "btnBuscarNombre"){
$Nombre=$_POST['Nombre'];
$stmt = $link->prepare("SELECT * FROM personas WHERE Nombre = ?");
$stmt->bind_param("s", $Nombre);
$stmt->execute();
$stmt->bind_result($id, $Nombre, $Edad, $Ciudad);
while ( $stmt-> fetch() ) {
echo $id.",".$Nombre.",".$Edad.",".$Ciudad."\n";
}
$stmt->close();
}
/////////////////////// MOSTRAR TABLA - SHOW TABLE /////////////////////////////////////
if ($boton == "btnVerTabla"){
$stmt = $link->prepare("SELECT * FROM personas");
$stmt->bind_param();
$stmt->execute();
$stmt->bind_result($id, $Nombre, $Edad, $Ciudad);
while ( $stmt-> fetch() ) {
echo $id.",".$Nombre.",".$Edad.",".$Ciudad."\n";
}
$stmt->close();
}
/////////////////////// OBTENER ORDENADO - GET SORT /////////////////////////////////////
if ($boton == "btnOrdenar"){
$Columna = $_POST['Columna'];
$stmt = $link->prepare("SELECT * FROM personas ORDER BY $Columna ASC");
$stmt->bind_param();
$stmt->execute();
$stmt->bind_result($id, $Nombre, $Edad, $Ciudad);
while ( $stmt-> fetch() ) {
echo $id.",".$Nombre.",".$Edad.",".$Ciudad.","."\n";
}
$stmt->close();
}
///////////////////////////////////////////////////////////////////
?>
|
_______________________________
|