Posibilidad de inyección SQL por valores estáticos o predefinidos

0

El uso de variables directas es vulnerable a la inyección de SQL. Así que para prevenir ataques usamos parámetros.

$result->bindParam(":id",$_POST['id'],PDO::PARAM_INT)

pero estoy confundido con respecto a la siguiente situación, tengo que usar el parámetro o el parámetro no aparece aquí.

Situation-1

Al llamar a la función

function fetch($id, $subid){
    $result=$con->prepare("SELECT * FROM......WHERE id=$id AND subid=$subid")
    $result->execute();
    .....
}

Si ponemos un valor estático en el código, no hay comentarios del usuario, ¿qué hay de la inyección aquí?

fetch(3,4);

Situation-2

La variable proviene de otra consulta

//first-query
$id = $row['id']

//second-query where first query variable is used
$result1=$con->prepare("SELECT * FROM......WHERE id=$id")

//Another Example

$id=$con->lastInsertId();    
$result1=$con->prepare("SELECT * FROM......WHERE id=$id")

Aquí usamos una variable asociada con una base de datos directa.

    
pregunta Dipak 08.08.2018 - 15:06
fuente

1 respuesta

3

Situación-1

Es una función . Lo que significa que podría llamarse con diferentes parámetros y no puede predecir si estos serán predefinidos o no.

Además, no entiendo por qué lo preguntas. ¿Es una declaración preparada que es difícil de usar para hacer que busque un atajo para un caso de uso deliberadamente raro?

Luego pregunte cómo hacer que una declaración preparada sea más fácil de usar. No es una ciencia espacial y hará que su código sea tan simple como

function fetch($id, $subid){
    $sql = "SELECT * FROM...WHERE id=? AND subid=?";
    return $this->con->run($sql, [$id,$subid])->fetch();
}

así que simplemente no habrá razón para evitar una declaración preparada.

Situación-2

Esto se denomina " inyección SQL de segundo orden ", y es la razón para usar una declaración preparada para cualquier variable , independientemente de la fuente.

    
respondido por el Your Common Sense 08.08.2018 - 15:18
fuente

Lea otras preguntas en las etiquetas