Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 28
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75

    Sicurezza autenticazione

    buon pomeriggio ha tutti
    Ho fatto un sito in ASP che permette agli utenti di accedere all'area riservata tramine nome utente e password. Il codice è riporato sotto. La domanda è questa: questo tipo di codice garantisce un certo livello di sicurezza o è facilmente superabile?
    grazie a tutti

    dim utente
    dim password
    dim url
    utente=replace(request.form("user"),"'","''")
    password=replace(request.form("password"),"'","''" )
    url=request.form("form_url")

    Dim Conn
    Set Conn = Server.CreateObject("ADODB.Connection")
    conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("mdb-database/utenti.mdb")
    Set rs = Server.CreateObject("ADODB.Recordset")

    qry = "Select * from Utenti Where (([User]='"
    qry = qry & utente & "') AND ([Password]='"
    qry = qry & password & "'));"

    rs.ActiveConnection = conn
    rs.CursorLocation = 2
    rs.Open qry

    Response.Expires=0

    if rs.EOF then
    response.redirect("checkOut.html")
    else
    session("registrato")="sicuro"

    response.redirect(url)
    end if
    %>

  2. #2
    Utente di HTML.it L'avatar di yro
    Registrato dal
    Sep 2003
    Messaggi
    2,916
    devi stare attento alle SQL Injection
    e io userei il case sensitive per fare la distinzione tra lettere maiuscole e minuscole...

    se fai delle ricerche nel forum trovi tutto l'indispensabile!
    E se avessi il dono della profezia e conoscessi tutti i misteri e tutta la scienza, e possedessi la pienezza della fede così da trasportare le montagne, ma non avessi la carità, non sono nulla.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75
    TI ringrazio per la risposta.
    Per evitare SQL injection è sufficiente renderli case senstive?
    Per far questo ho cercato di documentarmi ma il codice che ho trovato non riesco ad intergrarlo con quello esistente.
    Ho capito che bisogna utilizzare
    if (strComp(rs("User"),utente,0)=0) and
    (StrComp(rs("Password"),password,0)=0)
    ma con la mia poca esperienza non riesco ad integrarlo.
    non è che mi potresti dare una dritta?
    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    306
    se ti può essere utile fai così:

    Dim username, password, re
    username = Request.Form("username")
    password = Request.Form("password")
    Set re = New RegExp
    re.Pattern = "^[a-zA-Z0-9]+$"
    If re.Test(username) = False Or re.Test(password) = False Then
    Response.Write "Inserire username e password alfanumeriche"
    ElseIf Len(username) < 6 Or Len(password) < 6 Then
    Response.Write "Inserire username e password di almeno 6 caratteri"
    Else
    Dim sc, cn, rs, sql
    sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
    sc = sc & Server.MapPath("database.mdb")
    Set cn = Server.CreateObject("ADODB.Connection")
    Set rs = Server.CreateObject("ADODB.Recordset")
    cn.Open sc
    sql = "SELECT id, password FROM utenti "
    sql = sql & "WHERE username = '" & username & "'"
    rs.Open sql, cn, 1
    If rs("password") = password Then
    'esegui il redirect della pagina
    session("login") = rs("id")
    Else
    'password errata o utente inesistente
    End If
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    End If
    End If
    in questo modo eviti le sql injecton in quanto eviti i caratteri speciali con le espressioni regolari, è case sensitive ed esegui anche un ulteriore test sulla lunghezza della password.

    per la pagina protetta la richiami così:

    <%
    Dim userid
    userid = Session("login")
    If IsNumeric(login) = False Or userid < 1 Or userid = "" Then
    ' se non sei autorizzato esegui il redirect della pagina
    End If
    %>
    in modo da fare 3 controlli per essere abbastanza sicuro che la pagina la visiti solo la persona autorizzata. Spero che ti possa essere utile..ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75
    Mi sembra ottimo!
    Ora lo testo subito.
    Ti ringrazio moltissimo per il tuo aiuto
    A presto!
    Ab6499

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75
    Ciao,
    sto avendo una serie di problemi che ti riassumo

    1° problema risolto
    sql = "SELECT id, password FROM utenti "
    sql = sql & "WHERE username = '" & username & "'"

    l'ho dovuto modificare così altrimenti la pagina va in errore

    sql = "SELECT id, password FROM utenti WHERE [username] = '" & username & "'"

    2° problema NON risolto
    la username NON è case sensitive (non riesco a capire perchè)

    3° problema NON risolto
    Response.Write ("Inserire username e password alfanumeriche")
    anche se username e password non sono alfanumeriche non viene visualizzato il messaggio ma la pagina va in errore (An error occurred on the server when processing the URL. Please contact the system administrator. )

    Riesci a darmi qualche indicazione per come risolvere questi problemi?
    Grazie in anticipo per il tuo aiuto

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2002
    Messaggi
    306
    Per il secondo problema è normale che non funziona il case sensitive in quanto l'espressione regolare controlla solo se sono stati utilizzati caratteri alfanumerici, per aggiungere il case sensitive prova a modificare così:

    sql = "SELECT id, username, password FROM utenti WHERE [username] = '" & username & "'"
    rs.Open sql, cn, 1
    If rs("password") = password and rs("user") = username Then
    'esegui il redirect della pagina

    per l'altro problema togli l'ultimo end if, mi sa che ne ho messo uno di troppo, testalo tu e fammi sapere, in questi giorni ho poco tempo, infatti solo ora ti ho potuto rispondere...

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75
    Prima di tutto grazie per le tue risposte.

    Ora anche la username è case sensitive!
    (L'uinca cosa l'sql l' trasfomata da così
    sql = "SELECT id, username, password FROM utenti WHERE [username] = '" & username & "'"
    a così
    sql = "SELECT * FROM utenti WHERE [username] = '" & username & "'"
    altrimenti andava in errore. Comunque va bene!)

    Per il problema del controllo della username e password alfanumeriche gli if sono corretti (se ne tolgo uno la pagina va sempre in errore).
    Non riesco a capire dove possa essere il problema.
    Cosa posso fare?
    Grazie ancora molto

  9. #9
    ... mhm ... prova a separarli...

    codice:
    If re.Test(username) = False 
    Response.Write "Inserire username alfanumerica"
    response.end
    end if
    
    if re.Test(password) = False Then
    Response.Write "Inserire password alfanumerica"
    response.end
    end if
    anche se suggerirei un ".redirect" per gestire l'errore in separata sede...
    Grazie sempre di tutto!!!
    Alberto

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    75
    Scusate torno un attimo indietro al post precedente perchè mi sono accorto che se vengono inseriti i dati di autenticazione errati sono per il case sensitive correttamente non va fare il login ma appare la pagina checkout con la dicitura he i dati non sono corretti.
    Ma se vengono inseriti dati completamente sbagliati (tipo sdhjsdhsd) la pagina va in errore. Scusate ma sono un po in confusione.
    Posto tutto il codice per sicurezza

    Grazie a tutti

    <%

    Dim user, password, re
    user = Request.Form("User")
    password = Request.Form("Password")
    Set re = New RegExp
    re.Pattern = "^[a-zA-Z0-9]+$"

    If re.Test(user) = False then
    Response.Write ("Inserire username alfanumerica")
    response.end
    end if

    If re.Test(password) = False then
    Response.Write ("Inserire password alfanumerica")
    response.end
    end if


    If Len(user) < 6 Or Len(password) < 6 Then
    Response.Write ("Inserire username e password di almeno 6 caratteri")
    Else

    Dim cn, rs, sql
    Set cn = Server.CreateObject("ADODB.Connection")
    cn.open(ConnStrSQL)

    'sql = "SELECT id, password FROM Anagrafica WHERE [user] = '" & user & "'"
    sql = "SELECT * FROM Anagrafica WHERE [user] = '" & user & "'"

    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.Open sql, cn, 1
    If rs("password") = password and rs("user") = user Then
    'If rs("password") = password Then

    'esegui il redirect della pagina
    session("registrato")=rs.Fields("ID").Value
    response.redirect("perspage.asp?ID="&rs.Fields("ID ").Value)
    Else

    'password errata o utente inesistente
    response.redirect("checkOut.html")
    rs.Close
    cn.Close
    Set rs = Nothing
    Set cn = Nothing
    End If
    End If
    %>

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.