Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135

    Limite numerico di tentativi di accesso

    Girovagando per la rete e la ricerca ho trovato un codice che dovrebbe limitare i tentativi di accesso ad una area riservata di un sito.

    In teoria quando si sbagliano per tre volte (consecutive?) i dati di autenticazione l'account dovrebbe bloccarsi; dico in teoria perchè in pratica non funziona, ecco il codice:

    convalida.asp
    codice:
    
    <%
    
    FUNCTION dataShort(dtData) 
        dataShort = Year(dtData) &"/"& right("00"&month(dtData),2) &"/"& right("00"&day(dtData),2)
    END FUNCTION 
     
    FUNCTION filtraSQL(stringa)
    	strFiltrata = Replace(stringa,"'", "´")
    	strFiltrata = Replace(stringa,"%", "")
    	filtraSQL = strFiltrata
    END FUNCTION
     
    dim strUser
    	strUser=request.form("user")
    dim strCode
    	strCode=request.form("codice")
    	strCode=cripta(strCode,key)
    	strReferer = Request.Form("referer")
    	 
    SET objRS = Server.CreateObject("ADODB.Recordset")
    objRS.ActiveConnection = cn
     
    strSql = "SELECT * FROM codici WHERE userName='"&strUser&"' AND userCode='"&strCode&"'"
    objRS.Open strSQL
     
    IF not objRS.EOF THEN
     
      if IsNull(session("tentativi")) then
         session("tentativi") = 1
       else
         session("tentativi") = session("tentativi") + 1
       end if  
       
      Response.Cookies("innovatel.it_accesso")("valido")="ok"
      Response.cookies("innovatel.it_accesso")("nome")=objRS("utente_id")
      Session("user") = Request("user")
      Session("id_utente") = objRS("utente_id")
      strEmail = objRS("userMail")
      %>
    
    <%
     
    session.sessionID
    data = dataShort(date())
    tempo = time()
     
    Sql = "INSERT INTO ACCESSI (UTENTE, DATA, ORA, SESSIONID, strEmail)VALUES('"&strUser&"', #"&data&"#, '"&tempo&"', "&session.sessionID&", '"&strEmail&"')"
    cn.Execute(SQL)
    end if
     
      ChiudiDB()
      Response.Redirect Request.Form("referer")
     
    Sub ChiudiDB()
      objRS.Close
      Set objRS = Nothing
      
      cn.Close
      Set cn = Nothing
    End Sub
    %>
    login.asp
    codice:
    <% 
    IF Request.QueryString("referer") = "" THEN
      strReferer = Request.ServerVariables("HTTP_REFERER")
    ELSE
      strReferer = Request.Querystring("referer")
    END IF
     
    if session("tentativi") < 3 then
    
     'FAI VEDERE IL FORM
     
    else
     
    response.write "Account bloccato"
     
    end if
    %>
    I dati continuano ad essere richiesti anche superati i tre tentativi...

  2. #2
    Fatti fare un bel response.write di session("tentativi")

  3. #3
    Utente di HTML.it L'avatar di fraude
    Registrato dal
    Feb 2004
    Messaggi
    2,870
    Per come lo hai concepito, è impensabile che il tuo controllo possa mai funzionare e te ne spiego anche la ragione:

    Il costrutto:
    codice:
    IF NOT objRS.EOF THEN
    ... codice da eseguire a login CORRETTO! ...
    END IF
    significa che, in fase di login, i dati inseriti trovano una corrispondenza diretta all'interno del DB e quindi l'utente ha le credenziali appropriate.

    La tua variabile di controllo avrà valore 1 al primo login correttamente effettuato e supererà il numero di tre tentativi solo qualora, nel corso della medesima sessione, l'utente effettui tre login corretti!

    Ora non posso sapere di preciso come vorresti utilizzare il codice, tuttavia a titolo molto esemplificativo, per utilizzare la variabile di controllo, dovresti modificarti il costrutto, prevedendo del codice alternativo da eseguire in caso di login fallito, nel modo seguente:
    codice:
    IF NOT objRS.EOF THEN  ' l'utente ha effettuato correttamente il login
     
      Response.Cookies("innovatel.it_accesso")("valido")="ok"
      Response.cookies("innovatel.it_accesso")("nome")=objRS("utente_id")
      Session("user") = Request("user")
      Session("id_utente") = objRS("utente_id")
      strEmail = objRS("userMail")
      %>
      
      <%
      data = dataShort(date())
      tempo = time()
       
      Sql = "INSERT INTO ACCESSI (UTENTE, DATA, ORA, SESSIONID, strEmail)VALUES('"&strUser&"', #"&data &_
            "#, '"&tempo&"', "&session.sessionID&", '"&strEmail&"');"
      cn.Execute(SQL)
     
    ELSE  ' l'utente non viene riconosciuto
     
      IF IsNull(session("tentativi")) THEN
        session("tentativi") = 1
      ELSE
        session("tentativi") = session("tentativi") + 1
      END IF
        
       .... eventuale altro codice in caso di Login fallito ...
        
    END IF
    Solo ora la variabile di controllo, pertinentemente valorizzata, avrà la sua validità.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.