{PHP} Inyección de SQL [duplicado]

-3

Tenga en cuenta: esto no es un duplicado! ¿Por qué? Puedes usar 'pero no sabes cómo :)

Tengo este código PHP:

<?php
(...)

function escape($str) {
$ret = '';
for($i=0;@$str[$i];$i++)
{
    if($str[$i]!='\'')
    if($str[$i]!='\')
    if($str[$i]!='"')
    if($str[$i]!="\r")
    if($str[$i]!="\n")
    if($str[$i]!="\x1a")
    {
        $ret .= $str[$i];
        continue;
    }
    $ret .= '?';
}
return $ret;
}

$pass = escape($_POST['password']);

$query = "select 1 from user_pwd where pass='{$pass}'";
$query = mysql_query($query);
$array = mysql_fetch_array($query);
var_dump($array);
?>

Sé que eso no es seguro (sé Inyección SQL, puedo hacer mysql_real_escape_string o add_slashes, pero solo quiero saber qué está mal :).

EDITAR: Puedes usar '. Si envía una matriz en los datos de la POST: contraseña [0] = 1 & contraseña [1] = 'union select' 1 Harás Inyección SQL ^^

    
pregunta Szymon Marczak 04.08.2015 - 16:03
fuente

1 respuesta

2

Primero, como ya viste, está abierto a la inyección de SQL. La inyección de SQL no se limita a las cosas que comienzan con "-" o "//"; sólo está limitado por la creatividad del atacante.
Utilizar consultas parametrizadas. Siempre.

Segundo, debes codificar la contraseña. Las funciones integradas de PHP le brindan sistemas que hacen hash automáticamente y proporcionan un salt, por lo que no tiene excusa.

El propósito del filtrado a menudo es evitar los ataques XSS, pero ocurren cuando se muestran datos que un usuario (el atacante) ingresó a otro usuario. Espero que no estés planeando mostrar las contraseñas de las personas a visitantes aleatorios ...

    
respondido por el S.L. Barth 04.08.2015 - 16:12
fuente

Lea otras preguntas en las etiquetas