Quantcast
Channel: Tópicos
Viewing all articles
Browse latest Browse all 14700

Prepared statements vunerável a ataques

$
0
0
Boas!

Fiz o seguinte código, utilizando a extensão mysqli_*, assim como prepared statements, porém segundo o sqlmap, isto continua vunerável:

Código (PHP):
$id        = $_GET['id'];



//Connect to MySQL database:
$db       = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE);
if ($db->connect_errno) {
    echo "Failed to connect to MySQL: (" . $db->connect_errno . ") " . $db->connect_error;
}
//Define charset:
if (!$db->set_charset("utf8")) {
    echo "Failed to set charset: " . $db->error;
}
$id = $db->real_escape_string($id);
//Prepare statement:
if(!($stmt = $db->prepare("SELECT post.PO_title, post.PO_abstract, post.PO_content, post.PO_datetime FROM post WHERE post.PO_ID = {$id}"))) {
    echo "Prepare failed: (" . $db->errno . ") " . $db->error;
}
//Bind results:
if(!($stmt->bind_result($title, $abstract, $content, $datetime))) {
    echo "Binding parameters failed: (" . $stmt->errno . ") " . $stmt->error;
}
//Execute query:
if(!($stmt->execute())) {
    echo "Execute failed: (" . $stmt->errno . ") " . $stmt->error;
}

$stmt->fetch();

mysqli_close($db);

Como podem ver, o $id é recebido por um parâmetro $_GET

Uma forma de eu evitar a injeção SQL é simplesmente adicionando:
Código (PHP):
$id        = (INT)$_GET['id'];
Porém o sqlmap detecta isso... O que me falta?

Viewing all articles
Browse latest Browse all 14700

Trending Articles