Visualizzazione risultati 1 fino 17 di 17

Discussione: Problemi di bot/spam

  1. #1
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Angry Problemi di bot/spam

    Salve,
    ho cercato con la funzione cerca ma sembra che tutti abbiano problemi con spammers e bot con phpBB joomla e wordpress.... mentre io ho un sito con registrazione scritto da me in PHP quindi non dovrei avere gli stessi tipi di bug...
    ho notato che si registra un utente che in realt un BOT inserendo una mail che non esiste, il mio sistema manda una active key all'indirizzo email inserito creandolo al momento dell'iscrizione in questo modo:
    Codice PHP:
        $actkey mt_rand(10000,99999).time().$email;
        
    $act sha1($actkey); 
    la cosa che mi fa strano che pur non avendo ricevuto la mail alcune iscrizioni fasulle sono attivate quindi in qualche modo riesce a generare una active-key valida e si attiva l'iscrizione....
    Ma quello che mi fa incaz.... che da ieri ho messo un captcha a 6 lettere e stanotte ho avuto 3 iscrizioni .... quindi il captcha gli fa un baffo????
    potete darmi qualche consiglio?

  2. #2
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    la cosa che mi fa strano che pur non avendo ricevuto la mail alcune iscrizioni fasulle sono attivate quindi in qualche modo riesce a generare una active-key valida e si attiva l'iscrizione....
    Evidentemente c' qualche problema nel tuo codice allora, magari SQL Injection. In tal caso per meno probabile siano attacchi generici automatizzati.

  3. #3
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    No tenderei ad escludere Injection (ho scoperto ora che cosa ) visto che l'utente attiva ha un campo crediti di valore 100 che lo stesso valore che imposta la pagina activate.php richiamata dal link con il codice generato.
    Per ora sembra che sia riuscito a bloccarlo con un controllo sul campo Societ che opzionale e pu restare vuoto, ho notato che il bot ci scriveva 1 sola lettera oppure [Varies] oppure [116 row a seat], speriamo che sia sufficente...
    Conviene far un controolo e un ban temporanei agli IP?
    Mi consigliate altro?

  4. #4
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    No tenderei ad escludere Injection (ho scoperto ora che cosa )
    Molto male.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    visto che l'utente attiva ha un campo crediti di valore 100 che lo stesso valore che imposta la pagina activate.php richiamata dal link con il codice generato.
    E quindi? Potrebbe recuperare il codice corretto dal database mediante SQL injection, oppure effettuare una SQL injection proprio nella pagina che verifica l'"active key", a seconda di come hai scritto il codice.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Per ora sembra che sia riuscito a bloccarlo con un controllo sul campo Societ che opzionale e pu restare vuoto, ho notato che il bot ci scriveva 1 sola lettera oppure [Varies] oppure [116 row a seat], speriamo che sia sufficente...
    Conviene far un controolo e un ban temporanei agli IP?
    Non aggirare il problema: identificalo e risolvilo. Se qualcuno riuscito a fare una cosa simile i tuoi script presentano un problema di sicurezza che devi risolvere. Limitando l'accesso ad alcuni IP non risolvi nulla, al pi rimandi la risoluzione del problema a dopo.

    Comincia con il riportare il codice della pagina activate.php, cos vediamo se l ci sono falle sfruttabili.

  5. #5
    L'avatar di darkwolf
    darkwolf non  connesso Moderatore
    Data registrazione
    18-04-2007
    Residenza
    Reggiolo (RE)
    Messaggi
    5,959

    Predefinito

    Oltre quanto consigliato da Karl, prova a capire se tali bot usano effettivamente quella pagina oppure no!
    Quindi stampa l'eventuale Form in javascript (a prova di bot) e/o aggiungi un campo hidden (da salvare) cos vedrai se passan davvero da l (se quel campo presente oppure no).
    Oltre ci, se non si tratta di sql onjection, puoi provare recaptcha invece del semplice captcha, e magari un un campo 'honeypot'.
    Ultima modifica di darkwolf : 31-01-2017 alle ore 18.14.59

  6. #6
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    Scusate le mie mancanze ma non sono un programmatore professionista...

    far un log di tutti i tentativi di registrazione al pi presto

    la pagina activate.php
    Codice PHP:
    <?php
    include 'lib/pagina.php';
    include 
    'lib/config.php';       //Per connessione a database

    sopra_testa();
    titolo("Attivazione");
    testa();
    sotto_testa();

    titoloh2("Attivazione");
    iniziocontenuto();

    $id $_GET['id'];

    $query mysql_query("SELECT * FROM Users WHERE Actkey = '$id' LIMIT 1") or die(mysql_error());
    $row mysql_fetch_array($query);

    if(
    mysql_num_rows($query) > 0){

    if (
    $row['Activated'] == '1') {echo '<pm>Attenzione!, account gi attivo<BR><pm>';goto salta_activate;}


    $user $row['id'];

    $do mysql_query("UPDATE Users SET Activated = 1 WHERE id = '$user' LIMIT 1") or die(mysql_error());

    //Regalo $FirstBonus crediti all'attivazione*********************************************************
    $FirstActivation $row['FirstActivation'];
    if (
    $FirstActivation == '0')
    {
        
    //Do il FirstBonus + attivo FirstActivation + do Potere 1 => 'Utente'
        
    $do1 mysql_query("UPDATE Users SET 
                            Credito = 
    $FirstBonus,
                            FirstActivation = 1,
                            Poteri = 1
                            WHERE id = '
    $user' LIMIT 1") or die(mysql_error());
        
    reg_forum($row['Username'], $row['Password'], $row['Email'], $row['IP'], 'it');
    }
    //***************************************************************************************************

    $message "Grazie per aver attivato il tuo account, ora sei registrato e puoi utilizzare i nostri servizi.\n\n";
    if (
    $FirstActivation == '0'$message .= "Ti sono stati accreditati $FirstBonus CREDITI\n\n";
    $message .= "Per loggare, clicca questo link: $SiteLink/login.php";

    $send mail($row['Email'], "Conferma di attivazione"$message"FROM: ".$MittEmail);

    if((
    $do)&&($send))
        {
        echo 
    '<link href="style.css" rel="stylesheet" type="text/css">
             <div id="success">
             <p>Account attivato. Una email di conferma ti  stata inviata. Ora puoi loggarti.</p>
             <p><a href="login.php">Clicca qui</a> per andare alla pagina di login.</p>
             </div>'
    ;
        if(
    $do) echo '<p>Do  OK<p>';
        if(
    $send) echo '<p>Send  OK<p>';
    } else {
        echo 
    '<link href="style.css" rel="stylesheet" type="text/css">
             <div id="error">
             <p>Spiacenti,  accaduto un errore durante il processo di attivazione. Per favore riprova.</p>
             </div>'
    ;
        if(
    $do) echo '<p>Do  OK<p>';
        if(
    $send) echo '<p>Send  OK<p>';
        }

    } else {

    echo 
    '<link href="style.css" rel="stylesheet" type="text/css">
         <div id="error">
         <p>Spiacenti, il tuo codice di attivazione  incorretto. Per favore riprova.</p>
         </div>'
    ;


    salta_activate:

    mysql_close($l);

    finecontenuto();

    fondo();
    ?>

  7. #7
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    ecco il bot

    3
    93.170.130.95
    data:01, 02 17 Nome:IsaacRor Cognome:IsaacRorON User:IsaacRor Soc:116 row a seat 20 email:owen@1milliondollars.xyz pass:cy32z7SbvK campovuoto:
    5
    46.119.127.74
    data:01, 02 17 Nome:DanielFoolo Cognome:DanielFooloTV User:DanielFoolo Soc:116 row a seat 20 email:owgfikeley@sills25.browndecorationlights.com pass:s57Ly4innK campovuoto:
    6
    89.26.248.3
    data:02, 02 17 Nome:MichaelBiara Cognome:MichaelBiaraPQ User:MichaelBiara Soc:116 row a seat 20 email:ililina1977@rambler.ru pass:3P9bq1epkU campovuoto:
    7
    188.232.75.96
    data:02, 02 17 Nome:đĺńńSlers Cognome:đĺńńSlersGZ User:đĺńńSlers Soc:116 row a seat 20 email:doloress.ignotenvovas@yandex.ru pass:2yy5Bq9vsF campovuoto:
    8
    46.119.127.74
    data:02, 02 17 Nome:Jeremyaluck Cognome:JeremyaluckGD User:Jeremyaluck Soc:1 email:pcfjcgnfli@duve.leathermenshoes.com pass:3wjo2z5XnA campovuoto:

  8. #8
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Prendi un file incluso da tutte quante le pagine ed inserisci in questo del codice per registrare tutte le richieste in maniera dettagliata (salvati il contenuto di $_SERVER e $_POST), cos da poter identificare quali sono effettivamente le richieste effettuate e quali parametri vengono passati.
    Il codice che hai riportato vulnerabile ad attacchi di tipo SQL injection: con una singola richiesta HTTP un malintenzionato pu eliminare tutti i dati contenuti sul tuo database.
    Correggi il codice in modo che non sia possibile effettuare SQL injection, leggi http://php.net/manual/en/security.da...-injection.php.
    Ultima modifica di karl94 : 03-02-2017 alle ore 20.36.18

  9. #9
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    Allora dai log delle pagine register e activate vedo che non usa injection ma delle registrazioni fatte da probabilmente da BOT e poi manda pi activate per azzeccare il codice di attivazione.
    Ora che l'ho bloccato ha usato una mail vera per ricevere activateID, credo che sia per capire come riprodurlo (mia ipotesi)...
    Ora come lo posso fermare???

    Il recaptcha di google pu funzionare?
    Ultima modifica di TRAX3D : 07-02-2017 alle ore 13.03.25

  10. #10
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Il recaptcha di google pu funzionare?
    S, ma sistema le vulnerabilit SQL injection.

  11. #11
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    Citazione Originalmente inviato da karl94 Visualizza messaggio
    S, ma sistema le vulnerabilit SQL injection.
    basta filtrare le immissioni e togliere '=' o la cosa molto pi complessa?

  12. #12
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Facciamo cos: prendi il codice che hai gi riportato qua e prova a sistemare tutte le vulnerabilit, quindi riporta il risultato.
    Ad ogni modo, hai ben compreso come si possono sfruttare e cosa comportano? E perch si possono sfruttare?

  13. #13
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    Ok diciamo che per il login ho questa stringa che mi cripta la password quindi dovrebbe essere a prova di injection
    Codice PHP:
    $username trim(addslashes($_POST['username']));
    $password md5(trim($_POST['password']));

    //Mi connetto al database
    $query mysql_query("SELECT * FROM Users WHERE Username = '$username' AND Password = '$password' LIMIT 1") or die(mysql_error());
    $row mysql_fetch_array($query); 
    correggetemi se sbaglio, anche se la query dell'username mi da TRUE ma quella della password essendo criptata anche se metti una cosa < or 1=1> < or 1=1 > < or 1=1 ({ > < or 1=1 /* > viene bloccata.

  14. #14
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    Ok diciamo che per il login ho questa stringa che mi cripta la password quindi dovrebbe essere a prova di injection
    La tesi corretta, le premesse un po' meno.
    La funzione PHP md5 restituisce una stringa di 32 caratteri composta da cifre (0-9) e lettere (a-f). Con qualsiasi stringa di questo tipo non possibile alterare quella query in modo da farle fare qualcos'altro.
    Ad ogni modo la funzione md5 non una funzione di cifratura, ma una funzione di hash. Sono due cose estremamente differenti e si usano per scopi differenti. Una funzione di cifratura ha sempre l'inversa per decifrare, una funzione hash invece a senso unico.
    Premesso questo, usare md5 come hash per le password poteva andare bene forse dieci anni fa. Adesso una cosa del genere poco sicura: se uno riesce ad ottenere gli hash dal tuo database (e probabilmente ci si riesce senza troppe difficolt) pu facilmente ottenere le password in chiaro con vari tipi di attacco (brute force, rainbow table o anche banalmente cercando l'hash su un motore di ricerca).
    Usa piuttosto le funzioni password_hash e password_verify.
    E non chiamare trim sul contenuto della password.
    Citazione Originalmente inviato da TRAX3D Visualizza messaggio
    correggetemi se sbaglio, anche se la query dell'username mi da TRUE ma quella della password essendo criptata anche se metti una cosa <’ or ‘1’=’1> <’ or ‘1’=’1’ — ‘> <’ or ‘1’=’1’ ({ ‘> <’ or ‘1’=’1’ /* ‘> viene bloccata.
    Non quello il punto: non sono due query separate, una singola query. Se $username fosse sufficientemente manipolabile l'attaccante potrebbe semplicemente fare in modo che abbia come valore
    Codice:
    nomeutente'#
    in questo modo, la query diverrebbe
    Codice:
    SELECT * FROM Users WHERE Username = 'nomeutente'#' AND Password = '5f4dcc3b5aa765d61d8327deb882cf99' LIMIT 1
    Nel tuo caso per usi addslashes, quindi sul codice che hai riportato possibile un attacco di questo tipo solamente se utilizzi codifiche di carattere particolari (leggi http://shiflett.org/blog/2006/jan/ad...-escape-string).

    Il codice di activate.php che hai riportato invece non ha alcuna protezione: si pu sfruttare questo per effettuare una qualsiasi modifica al database (anche eliminare tutte le tabelle). Leggi ad esempio http://stackoverflow.com/questions/9...uery-of-select

  15. #15
    L'avatar di TRAX3D
    TRAX3D non  connesso Utente giovane
    Data registrazione
    08-12-2004
    Residenza
    Ossola
    Messaggi
    58

    Predefinito

    Salve,
    ci sto lavorando alla messa in sicurezza ma oggi che ho postato le modifiche mi trovo di fronte a questo problema:
    Codice PHP:
    <?php
    echo password_hash("ciao"PASSWORD_BCRYPT);
    ?>
    risultato?
    Fatal error: Call to undefined function password_hash() in /membri2/trax3d/Temp/test_password.php on line 2

    mentre sul mio PC con EasyPHP funziona tutto perfettamente....
    Ultima modifica di TRAX3D : 03-03-2017 alle ore 15.31.58

  16. #16
    mzanella non  connesso Altervistiano Junior
    Data registrazione
    29-12-2015
    Messaggi
    634

    Predefinito

    La versione di PHP deve essere almeno 5.5 per poter utilizzare password_hash. Puoi modificare la versione di PHP dal pannello di controllo di AlterVista

  17. #17
    karl94 non  connesso Staff AV
    Data registrazione
    03-10-2005
    Messaggi
    16,390

    Predefinito

    Perch hai scelto di usare l'algoritmo PASSWORD_BCRYPT?

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •