Iniezione Php-mysql

-1
<?php
error_reporting(E_ALL);
//ini_set('display_errors', 1);

$db_server = "localhost";
$db_name = "2";
$db_user = "root";
$db_passwd = "";

$connection = mysql_connect($db_server,$db_user,$db_passwd);
$db = mysql_select_db($db_name,$connection) or die("Couldn't Select Database");

if($_POST['text']){
    $result=mysql_query("SELECT * FROM login WHERE id='".  mysql_real_escape_string($_POST['text'])."'");
    while($row=mysql_fetch_array($result)){
        echo "<span>".$row['id']."</span>";
    }
}
?>
<form name="form" method="post" action="">
    <input type="text" id="text" name="text"/>
    <input type="submit" value="Submit"/>
</form>

Ad ogni modo di iniettare il mysql su questo tipo di struttura? Il database su con 1 colonna Tabella 1 con nome id, solo semplice negozio "abc, bca, taxi". Grazie.

    
posta user6468131 15.06.2016 - 09:38
fonte

1 risposta

5

Risposta breve, no.

Ma mysql_real_escape_string non è l'unica cosa che ti protegge qui.

Vedi:

$text = mysql_real_escape_string($_POST['text']); // $_POST['text'] == "1 OR 1=1"
$result = mysql_query("SELECT * FROM login WHERE id = $text");

Non sei protetto qui e è stata fatta un'iniezione. Quindi le tue citazioni ti stanno proteggendo da questo qui. Puoi anche digitare cast (int) perché è un id.

Come nota a margine, non dovresti usare mysql, ma mysqli .

Con mysqli puoi usare istruzioni preparate che ti proteggeranno da tutto ciò, poiché eseguirà la query con la parte dinamica trattata come stringa in qualsiasi momento.

    
risposta data 15.06.2016 - 09:55
fonte

Leggi altre domande sui tag