Piccolo aiuto con login in asp

di Anonimizzato910 il
8 risposte
Ciao a tutti, ho il seguente problema.

di solito non programmo in asp ma devo realizzare un lavoro in questo linguaggio.
dunque io devo utenticare login e password su un db access.
invio la stringa sql:

sql = "SELECT * FROM tabella WHERE logindb = '&login&' and pswdb = '&psw&'"

dove ovviamente '&login&' e '&psw&' sono i Request.Form inviati dal modulo di compilazione.
Ho fatto molte prove e sembra che il problema sia che lo script legge e compara solo la prima coppia presente nel db ignorando le altre. Quindi il login viene accettato solamente se inserisco la prima coppia presente nel database.
come faccio a fare il confronto con tutte le coppie del db?
Spero di essere stato chiaro e che qualcuno possa darmi una mano.
ciao a tutti e grazie.

8 Risposte

  • Ciao la stringa é errata!!

    la sintassi corretta é :
    sql = "SELECT * FROM tabella WHERE logindb = '" & login & '" and pswdb = '" & psw & "'"

    Ciao
  • Ciao Toki, grazie per la risposta. Purtroppo ancora qualcosa non va. Dunque io uso principalmente PHP. Quando, in php devo controllare che una stringa sql abbia "fatto il suo dovere" lo faccio con un qualcosa del genere:

    if(stringa){
    ....
    }
    else{
    ...
    }

    Ora, non so se sbaglio ma in ASP ho cercato di fare una cosa del genere e cioè:

    sql = "SELECT * FROM operatori WHERE logindb = '" & login & '" and pswdb = '" &psw& "' " (...la tua stringa)

    if sql then
    Response.Write("ok")
    else
    Response.Write("no")
    end if

    e cioè se trovi la coppia in questione allora va bene altrimenti no.
    ho provato anche con:

    if (sql) {
    Response.Write("ok")
    }
    else
    Response.Write("no")
    }

    ma è tutto vano. lo script non va e non trovo ancora una soluzione.
    Ho fatto altre prove ma niente. Dove sbaglio?
  • Finalmente!!!!!!!!!!
    Ne sono venuto a capo in questo modo:

    sql = "SELECT * FROM operatori WHERE logindb = '"&login&"' AND pswdb = '"&psw&"'"

    rs.Open sql, conn, 3, 3


    if NOT(rs.eof) then

    Response.Write("ok")
    else
    Response.Write("no")
    end if


    se a qualcuno può tornare utile...
  • Attenzione! Le login fatte in questo modo contengono un grosso buco di logica. Provate a mettere come password il seguente valore :

    a' or 'a' = 'a'

    la stringa sql diventerebbe :
    select * from utenti where userid = 'xx' and password = 'a' or 'a' = 'a' rendendo accessibile il sito a tutti.

    Spero di essere stato utile





    Roberto
  • Ciao PIUMO,

    hai toccato un argomento molto importante.

    la SQL Injection corretta é ' or 'a' = 'a


    CMQ basta eseguire il replace degli apici nei due campi in ingresso per impedirne il funzionamento.

    Es

    login = replace(login,"'","''")


    Ciao
  • Hai ragione ho aggiunto un apice di troppo.....

    un'altra soluzione possibile è quella (dando per scontato che lo user id sia univoco) di cercare prima il record per user id e poi confrontare le password!

    Roberto
  • Ho letto qualcosa su sql injection. ho fatto varie prove, compresa la stringa < ' or 'a' = 'a > ma non funziona, nel senso che mi nega l'accesso. In più il login lo effettuo anche impostando dei cookies e fino adesso non ho avuto problemi.
    ciao
  • Devo provare. effettivamente non avevo mai considerato questa tecnica. grazie per la dritta.
    ciao
Devi accedere o registrarti per scrivere nel forum
8 risposte