Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    che tipo di attacco è questo?

    ho questo log

    Codice PHP:
    sitoweb.org/forum/post.php?action=new&forum=1%2B%255BPLM=0%255D%255BN%255D%2BGET%2Bhttp://www.sitoweb.org/forum//post.php?action=new&forum=1%2B%255B0,17212,17404%255D%2B-%253E%2B%255BN%255D%2BPOST%2Bhttp://www.sitoweb.org/forum/post.php%2B%255B0,0,3461%255D 

    cos'è questo?

    post.php?action=new&forum=1%2B%255BPLM=0%255D%255B N%255D%2BGET%2Bhttp://www.sitoweb.org/forum//post.php?


    dentro la variabile $forum

    sembra un codice hash, una cosa del genere

    ma in realtà qual'è il suo significato?


    con un espressione regolare come questa si può evitare?

    Codice PHP:
    //controlliamo che il thread sia valido
    if(!preg_match('/^[0-9]{1,5}$/',$forum)){
        echo 
    "<center>Topic non exist#1</center>";
    exit;

    ciao

  2. #2
    Da quello che si legge in giro sembra un attacco per iniettare spam nelle form, ma non ho trovato molti dettagli al riguardo.

  3. #3
    Originariamente inviato da filippo.toso
    Da quello che si legge in giro sembra un attacco per iniettare spam nelle form, ma non ho trovato molti dettagli al riguardo.
    ah beh quello è sicuro, difatti non la vedo come una forma di hacking, ma solo come obbiettivo di spam, negli ultimi mesi hanno tentato di scrivere pi di 400 messaggi di spam

    però rimango perplesso ancora sul contenuto del codice e se posso evitarlo con le espressioni regolari

  4. #4
    Perchè non esegui un type cast su $_GET['forum'] per assicurarti che sia un int. In questo modo blocchi qualsiasi valore non desiderato.

  5. #5
    Originariamente inviato da filippo.toso
    Perchè non esegui un type cast su $_GET['forum'] per assicurarti che sia un int. In questo modo blocchi qualsiasi valore non desiderato.
    Codice PHP:
    settype($forum"int");
    $forum = (integer)$forum
    ?

    si infatti potrei anche se è molto simile a quello dell'espressione regolare di prima


    però resto ancora in attesa di capire il significato del codice

    questo perchè il tizio ha trovato una falla nel sistema, e scrive in anonimo senza essere registrato

  6. #6
    ehi filippo guarda che cavolo ho tirato fuori stanotte

    allora mettiamo che l'url sia questa
    Codice PHP:
    http://tuosito.org/forum/index.php?variabile=on:lo&star=yes 
    Codice PHP:
    //////////////////////////////////$_GET////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////
    //piccolo script di sicurezza interna del server
    if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']!="")
      {
      if (
    strpos($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])===false)
        {
        
    // Qualcosa non quadra: uscire dal programma, creare file di log, etc etc.
        
    }
      }          
      
    //prevents some problems with IIS Servers
    if (!isset($_SERVER['REQUEST_URI'])) {
    $_SERVER['REQUEST_URI'] = substr($_SERVER['PHP_SELF'],);
    if (isset(
    $_SERVER['QUERY_STRING']) AND $_SERVER['QUERY_STRING'] != "") {
    $_SERVER['REQUEST_URI'] .= "?".$_SERVER['QUERY_STRING'];
    }
    }
    /////////LO SCRIPT INIZIA QUI////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////
    $query $_SERVER["REQUEST_URI"]; //prendiamo la url
    $query str_replace("$_SERVER[SCRIPT_URL]?"""$query); //ma più in particolare solo dal punto interrogativo della pagina in poi
    $query explode("&"$query); //dividiamo tutte le variabili immesse
    $query_count count($query); //le contiamo
    if ($query_count "15"){exit;} //se sono superiori a 15 per una questione di irregolarità blocchiamo lo script
    for ($i 0$i <= $query_count$i++) {
    $queryt explode("="$query[$i]); //andiamo a selezionare ogni variabile
    if (strlen($query[$i]) > '50'){exit;} //se il numero dei caratteri dentro la variabile supera 50 lo fermiamo per non sovraccaricare il server
    //e da qui in poi si fa tutta una serie di rimpiazzamenti per ogni simbolo inserito, questo evita per esempio di non andare a interferire con le funzioni del nostro sistema
    $queryt[1] = str_replace("<"""$queryt[1]);
    $queryt[1] = str_replace(">"""$queryt[1]);
    $queryt[1] = str_replace("text/html"""$queryt[1]);
    $queryt[1] = str_replace(";"""$queryt[1]);
    $queryt[1] = str_replace(":"""$queryt[1]);
    $queryt[1] = str_replace("script"""$queryt[1]);
    $queryt[1] = str_replace("http"""$queryt[1]);
    $queryt[1] = str_replace("www"""$queryt[1]); //qualsiasi altra regola di str_replace è possibile inserirla in qualsiasi di queste righe dentro i tag {}
    $queryt[1] = str_replace("."""$queryt[1]);
    $queryt[1] = str_replace("/"""$queryt[1]);
    $queryt[1] = str_replace("'"""$queryt[1]);
    $queryt[1] = str_replace("?"""$queryt[1]);
    $queryt[1] = str_replace(".php"""$queryt[1]);
    $queryt[1] = str_replace("="""$queryt[1]);
    $queryt[1] = str_replace("%"""$queryt[1]);
    $queryt[1] = str_replace("!"""$queryt[1]);
    $queryt[1] = str_replace("("""$queryt[1]);
    $queryt[1] = str_replace(")"""$queryt[1]);
    //e dopo i rimpiazzamenti, ogni variabile riprende il suo posto ma senza la presenza di qualsiasi simbolo appena citato
    ${"$queryt[0]"} = "$queryt[1]";
    }
    //tutti i vari unset per sicurezza
    //////////////////////////////////$_GET////////////////////////////////////////////
    /////////////////////////////////////////////////////////////////////////////////////
    //////////////////////////////////$_GET////////////////////////////////////////////
    ///////////////////////////////////////////////////////////////////////////////////// 
    a questo punto se avevamo inserito questa url

    Codice PHP:
    index.php?variabile=on:lo&star=yes 
    proviamo a stampare a video il contenuto, vedremo che per esempio i due punti sono stati eliminati

    Codice PHP:
    echo "$variabile
    $star"
    e quindi $variabile visualizzerà onlo anzichè on:lo

    su un contenuto come quello di prima

    forum=1%2B%255BPLM=0%255D%255BN%255D%2BGET%2Bhttp://www.si ecc.....

    sarebbe impossibile sfuggire al controllo e quindi al rimpiazzamento delle
    %,=,http,:,/

    il vantaggio di questo codice?

    è che è dinamico, nel senso che non va a regolarizzare come quasi sempre accade, solo una o un gruppo di variabili inserite da $_Get, ma tutte, anche quelle sconosciute allo script che poi andremmo a realizzare.

    l'unico problema?
    beh potrebbe succedere che per esempio $variabile ci serva per far passare un url o cose del genere, anche se ciò non dovrebbe essere fatto, in quel caso potremmo fare un if() di controllo per le variabili a cui non fare il check()

    che ne pensi? può evitare anche molti XSS e script injection via url?

    datemi un vostro parere

  7. #7

  8. #8
    Originariamente inviato da alessiofbt
    è che è dinamico, nel senso che non va a regolarizzare come quasi sempre accade, solo una o un gruppo di variabili inserite da $_Get, ma tutte, anche quelle sconosciute allo script che poi andremmo a realizzare.
    Tralasciando che il codice che hai scritto non mi piace per niente, il tuo approccio non mi sembra corretto.

    Normalizza le variabili che utilizzi nello script, le altre scartale e basta.

    Ad esempio:

    Codice PHP:
    $forum = isset($_GET['forum']) ? (int)$_GET['forum'] : 0
    Usa una delle tante classi di validazione disponibili oppure implementane una tua secondo necessità.

  9. #9
    Originariamente inviato da filippo.toso
    Tralasciando che il codice che hai scritto non mi piace per niente, il tuo approccio non mi sembra corretto.
    cordialissimo

    il mio codice si rifletteva su una situazione ben più ampia di quella mia attuale, all'injection xss per esempio

  10. #10
    Originariamente inviato da alessiofbt
    il mio codice si rifletteva su una situazione ben più ampia di quella mia attuale, all'injection xss per esempio
    Questo non va su quello.

    Filtrare variabili che NON vengono usate nello script è un overhead inutile.

    Filtrare una variabile che dovrebbe contenere un int introduce solo un overhead, basta fare il typecast e si manda alle ortiche qualsiasi tentativo di attacco portato su quella variabile.

    Per l'XSS è sufficiente filtrare le variabili sensibili contro eventuali codici "maligni" (es. TIDY + DOM per eliminare qualsiasi tag ed attributo pericoloso).

    Un approccio stile magic_quote o register_globals è da evitare perchè spesso introduce più problemi di quanti ne risolva.

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.