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.449
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.343
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0

Discussioni simili