PHP OOP Brute Attack Class

Phelps

Utente Attivo
17 Dic 2018
50
0
6
Ciao ragazzi..
Qualcuno mi può aiutare nell implementare nel mio progettino di studio PHP una classe che gestisca il brute Attack sul forum Di login?
Ho fatto qualche ricerca in giro ho visto che è possibile farlo con database ma anche senza database con la cache.
Ho guardato in giro ma purtroppo non tutti scrivono come mangiano. :eek:Sembra che più si scrive difficile è meglio èo_O
Grazie!;)
 

Phelps

Utente Attivo
17 Dic 2018
50
0
6
ciao macus. Ben ritrovato.
Allora documentandomi un pò sulla sicurezza ho appreso che il metodo di bloccare un malintenzionato con il suo IP e timestamp da DB non è un metodo sicuro visto che è possibile cambiare IP nel corso di una sessione.
Ho visto invece che implementare il Lock out mediante sessioni potrebbe essere piu efficace.

PHP:
<?php
/**
 *
 */
class Brute
{

  const LOCK_TRIES = 3;
  const LOCK_TIME = 10;


  public static function startLockOut()
  {
  $_SESSION['lock-time'] = date('Y-m-d H:i:s');
  }

  public static function endLockOut()
  {
    if (!empty($_SESSION['lock-time'])) {
      unset($_SESSION['lock-time']);
    }
    if (!empty($_SESSION['lock-tries'])) {
      unset($_SESSION['lock-tries']);
    }
  }

  public static function checkLockOutTime()
  {
    if (isset($_SESSION['lock-time'])) {
      $current_time = new DateTime(date('Y-m-d H:i:s'));
      $wait_time = new DateTime($_SESSION['lock-time']);
      $wait_time->modify('+' . self::LOCK_TIME . ' minutes');
      if ($current_time > $wait_time) {
        self::endLockOut();
        return true;
      }else {
        return false;
      }
    }
    return true;
  }

  public static function checkLockOutTries()
  {
    if (empty($_SESSION['lock-tries'])) {
      $_SESSION['lock-tries'] = 1;
    } else {
      $_SESSION['lock-tries'] += 1;
    }

    if ($_SESSION['lock-tries'] > self::LOCK_TRIES) {
      self::startLockOut();
      return false;
    } else {
      return true;
    }
  }

}

le due funzioni checkLockOutTime() e checkLockOutTries() verranno richiamate in due variabili nella pagina di controllo login, se risulteranno true insieme al controllo di username e password, ok.... se risulteranno false bloccheranno per 3 tentativi e si sblocchera dopo 10 minuti e il display nella pagina di login sarà
PHP:
$tries = empty($_SESSION['lock-tries']) ? null : $_SESSION['lock-tries'];
        $time = empty($_SESSION['lock-time']) ? null : $_SESSION['lock-time'];
        $message = "User or Password Wrong ";
        $message2 = "Lock tries: $tries | lock time: $time";
      }

se al terzo tentativo le credenziali sono tutte vere entrerà e se poi schiaccerò logout, nella classe Session alla funzione logout faccio unset di $_SESSION[look-tries]

funziona !!!
Che ne pensi??
 
Ultima modifica di un moderatore:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.402
338
83
@Phelps
Quando posti del codice PHP usa il tag
php.png
al posto del tag
code.gif
!
Grazie
 

macus_adi

Utente Attivo
5 Dic 2017
1.333
91
48
IT/SW
Basterebbe implementare CSRF con rigenerazione ad ogni iterazione, aggiungi l'input nel form mettendo in redis il valore univoco inserito nell'input...
Il primo match effettua la verifica del token con quello inviato, se differente applichi le tue politiche di restrizione...

Quello che hai scritto è aggirabile semplicemente rigenerando le sessioni, funziona SOLO nella stessa finestra browser, ma se vieni attaccato stai pur certo che non lo si fa da UI..
 

Phelps

Utente Attivo
17 Dic 2018
50
0
6
il token già lo invio come input nascosto. Controllo che l'esadecimale generato e messo in sessione e poi inviato via form sia uguale a quello ricevuto via post. Insieme al controllo su campo email di tipo FILTER_VALIDATE_EMAIL e insieme anche ad una lunghezza minima della password di 6 caratteri e i caratteri accettati.
se questo controllo ritorna true allora si passa a cercare l'user via email, e se lo trova verifica la password hash.
ad entrambi user e password errati è collegato il conteggio delle possibilità per sbagliare.

Si è chiaro puoi rigenerare le sessioni solo se chiudi e riapri la finestra browser.
Se riapri la finestra si riavrebbe comunque lo stesso muro. Non aspetti 10min ma torni ai tentativi.
Cosa potrebbero fare allora con questo codice non da UI?
 

Phelps

Utente Attivo
17 Dic 2018
50
0
6
grazie per il link.. Dovrò trovare un po' di tempo per leggerlo:rolleyes:
A meno che io non sia Intesa San Paolo o Unicredit, ce né si deve avere di tempo e volontà da perdere per praticare un attacco del genere ad una povera piattaforma di un comune pseudoprogrammatore PHP:confused:

Tornando comunque alla possibilità di immettere nel DB una colonna IP ed una Timestamps. cosa potrei mettere per i scritto nella classe inputata per fermare un bruteforce attack con la sospensione IP?
Grazie.
 
Discussioni simili
Autore Titolo Forum Risposte Data
T con oop creare un ciclo per una pagina dinamica html con php PHP 3
D [PHP] Query in OOP class PHP 0
Drago73 [PHP] collegamento DB con OOP PHP 1
asevenx [PHP] Dubbio teorico sui metodi e costruttore OOP PHP 1
V [PHP] [OOP]Gestione errori connessione db PHP 5
A OOP è necessario mentre si studia PHP PHP 1
Marco_88 Autenticazione PHP/OOP campi vuoti PHP 26
S aiuto per script PHP/OOP PHP 2
U tutorial per OOP in php? PHP 4
M Visulizzare immagine con php PHP 7
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0
T arretramento versione PHP... PHP 3
D problema php mysql PHP 1
D problema php mysql PHP 1
E Barra di avanzamento codice PHP PHP 4
G creazione menu a tendina e invio a pagina php PHP 1
A inserire variabile php colore in div html PHP 2

Discussioni simili