Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    vulnerabilità sql injection. aiuto

    codice:
    <?php
    $user=$_POST['user'];
    $pass=$_POST['pass'];
    $db=mysql_connect("localhost", "root", "") or die ("impossibile 
    
    connettersi");
    mysql_select_db("utenti") or die ("impossibile selezionare il 
    
    database");
    $sql="SELECT nome FROM user WHERE password = '$pass' and nome= 
    
    '$user'";
    $res=mysql_query($sql, $db) or die ("errore:" .  mysql_error(). 
    
    "\nl'utente puo non esistere");
    $info=mysql_fetch_row($res);
    if (($info[0] != "") and ($pass== $info[0])){
    echo "connesso";}
    else{
    echo "non connesso";}
    
    ?>
    ho questo script di connessione al database, e vorrei sapere se è vulnerabile da injection e in che modo, perche consultando alcuni siti ho provato ad inserire quelle query, però senza risultato... le mie domande sono2:
    la vulnerabilità la posso vedere anche da locale senza caricare le pagine sul server??
    come si vede se è vulnerabile la pagina?
    come si rende non vulnerabile?
    datemi una mano perche mi serve per la tesina!
    vola come una farfalla, pungi come un'ape

  2. #2
    Vedere se uno script e' vulnerabile e' molto semplice: basta guardare se vengono filtrati i dati in ingresso o no. Il tuo script e' quindi vulnerabile, perche' prendi i dati inviati via POST e li passi ad una query cosi' come sono senza fare nessun controllo.

    La prima cosa da fare sarebbe non accettare valori che contengano caratteri non consentiti. Per esempio, se uno username dev'essere solo alfanumerico, controllare che il valore passato sia effettivamente alfanumerico. Se contiene altri caratteri, lo si rifiuta con un messaggio di errore. Idem per la password o qualunque altro dato. Chiaramente a seconda dei dati sara' piu' o meno facile restringere il campo di caratteri accettabili (ad esempio un indirizzo email contiene diversi caratteri oltre a semplici lettere e numeri), ma e' comunque un'importante misura di sicurezza.

    In ogni caso una buona cosa da fare (sempre, anche se si e' filtrato l'input come detto sopra) e' usare la funzione mysql_real_escape string() su ogni cosa che venga passata ad una query.

    Tornando al tuo script, vedo che le password vengono scritte nel db in chiaro. Questa e' un'altra cosa da evitare, meglio - ad esempio - memorizzare l'hash della password codificandola con la funzione md5().

  3. #3
    si ma è stato fatto apposta, perche la devo fare vulnerabile! comunque come la faccio l'injection??? perche ho provato tutti i modi, ma non riesco ad ottenere i risultati desiderati...
    vola come una farfalla, pungi come un'ape

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Originariamente inviato da giozh
    come la faccio l'injection???
    Vai sul modulo e digita questo sul campo user

    codice:
     ' or '1'='1
    (attenzione, c'è un apice all'inizio, due attorno al primo 1 e un altro prima del secondo 1)

    Il campo password lascialo vuoto.

  5. #5
    l'ho fatto, ma non accade nulla, mi dice solo non connesso
    vola come una farfalla, pungi come un'ape

  6. #6
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    In effetti non avevo guardato bene lo script, che è impostato piuttosto male.
    Innanzitutto: se c'è un errore sulla query tu scrivi "L'utente può non esistere", e questo non è corretto. Se c'è un errore significa che è sbagliata la query, punto.
    Il caso in cui l'utente non esiste è quando la query non restituisce risultati (che è diverso da dare un errore).
    Sostituisci l'ultima parte del tuo codice con questo:
    Codice PHP:
    $res=mysql_query($sql$db) or die ("errore:" .  mysql_error());
    $info=mysql_fetch_row($res);
    if (! 
    $info) echo "non connesso";
    else echo 
    "connesso"
    Così avrai il tuo esempio di query vulnerabile, e digitando quello che ti ho detto prima ti dovrebbe connettere.

  7. #7
    e fino a qui tutto ok, la query che mi hai dato funge, però io con questo sarei autenticato con il primo record del db???
    per vedere con quale nome sono autenticato come faccio??è giusto fare dentro la if dopo connesso

    Codice PHP:
    echo "connesso come" '$res'
    ???
    vola come una farfalla, pungi come un'ape

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Sì, ti dovrebbe connettere col primo record del db.
    Puoi anche provare in un altro modo: quella stringa di prima la digiti come password, e come nome utente ne metti uno qualsiasi esistente.
    Così dovresti entrare come quell'utente

  9. #9
    ti ringrazio per l'aiuto, però ho ancora alcune domande!
    una è quella scritta nel messaggio precendete, cioè come faccio apparire il nome dell'utente con cui sono connesso (in che variabile è salvato?)
    secondo che query devo passare per connettermi con il nome di un utente di cui però non conosco la password??
    vola come una farfalla, pungi come un'ape

  10. #10
    Originariamente inviato da giozh
    ti ringrazio per l'aiuto, però ho ancora alcune domande!
    una è quella scritta nel messaggio precendete, cioè come faccio apparire il nome dell'utente con cui sono connesso (in che variabile è salvato?)
    Il nome e' nell'array che ottieni da mysql_fetch_row()

    secondo che query devo passare per connettermi con il nome di un utente di cui però non conosco la password??
    Qualcosa come:

    codice:
    "' OR 1 AND nome = 'nomechevuoi' -- "

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.