Visualizzazione risultati 1 fino 11 di 11

Discussione: bug in file txt

  1. #1
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito bug in file txt

    Buona sera ragazzi mi servirebbe di nuovo il vostro aiuto, mi sapreste indicare se c'è la possibilità di evitare di salvare del testo direttamente in un file txt baipassando form e insert quindi tutti i controlli che dovrebbero essere effettuati?

    Non so come ma evidentemente qualcuno è riuscito a leggere il nome del file in cui salvo i dati del mio commentario e mi riempie di messaggi divertendosi a scrivere tutto ciò che in teoria non potrebbe essere scritto, ragione per cui ho pensato che scriva direttamente nel file, ci sono riuscita pure io x cui non è una cosa complicata ma non capisco come abbia fatto a trovare il nome del file in un codice scritto in php

    Spero che qualcuno abbia dei suggerimenti.... tipo come nascondere il nome del file o come evitare che si possa scrivere direttamente nel file
    Grazie

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,186

    Predefinito

    Secondo me non è un problema che riesce a trovare il nome dei file: conoscendo quel nome, non può comunque far nulla... Secondo me c'é un bug nello script che scrive su txt...

    Ciao!

  3. #3
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito

    Ciao Ale, se conosci il nome del file puoi fare eccome, ci sono riuscita anche io con un semplicissimo script^^ cmq, questo è il codice che salva i messaggi nel file
    Codice PHP:
    <?php include ("gif.php"); ?>

    <?php
    $my_database_txt
    = 'xxxxxxx.txt';

    //ricavo l'ora e la data odierna
    $data_ora = date("d/m/Y H:i:s");
    $ip = $_SERVER['REMOTE_ADDR']; //ip

    if(isset($_POST['invia']))
    {
    if(!
    is_writable($my_database_txt)){
    exit(
    "il file non ha i permessi di scrittura!");
    }
    // riceviamo i dati e li filtriamo
    $bad_char = array("|", "\r\n", "\r", "\n");
    $nikname = str_replace($bad_char, "", $_POST['nikname']);
    $urlsito = str_replace($bad_char, "", $_POST['urlsito']);
    $email = str_replace($bad_char, "", $_POST['email']);
    $messaggio = str_replace($bad_char, "", $_POST['messaggio']);
    $img = str_replace($bad_char, "", $_POST['img']);
    // apriamo il file
    $open = fopen($my_database_txt, "a+");

    if (
    $nikname=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_nome1");
    } elseif (
    $messaggio=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_messaggio1");

    }else {

    // Ban ip
    $bannati=array("173.208.175.250","188.218.25.159","89.210.57.37");

    if(
    in_array($_SERVER['REMOTE_ADDR'],$bannati)) {
    echo
    header("location: penelope_commentario.php?id=Errore_post");
    $ctrl = 1;
    }


    // Controllo parolacce interamente realizzato da Bradiposo
    $file = 'filtro.txt';
    if(
    file_exists($file))
    $parolacce= file($file,FILE_IGNORE_NEW_LINES);
    else echo
    'Il file non è raggiungibile...';

    //controllo url
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $urlsito);
    if (
    $exp[0]!=$urlsito) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_url");
    }
    }


    //controllo nome
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $nikname);
    if (
    $exp[0]!=$nikname) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_nome");
    }
    }


    //controllo messaggio
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $messaggio);
    if (
    $exp[0]!=$messaggio) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_messaggio");
    }
    }

    $txt = stripslashes($messaggio);
    $stop_http=false;
    $htmlContentString = $txt;
    $pattern_http_href = '/(http:\/\/|href=[\'"](.*?)[\'"])/si';

    if (
    preg_match_all($pattern_http_href,$htmlContentString,$matches,PREG_SET_ORDER)){
    //come test:
    //echo "<p>matches=";print_r($matches);

    foreach ($matches as $val)

    {

    //come test:
    //echo "<p>val[0]=".$val[0];
    //echo "<p>val[1]=".$val[1];
    //echo "<p>val[2]=".$val[2];

    if ($val[0] == 'http://'){
    $stop_http=true;
    //come test:
    //echo ("<script>alert('Errore: non è ammesso inserire url direttamente, utilizzare il bbcode!')</script>");
    break;
    }
    }
    }

    if (
    $stop_http) {
    echo
    header("location: penelope_commentario.php?id=Errore_link");
    $ctrl = 1;
    }

    $stop=false;
    $htmlContentString = $txt;
    $pattern = '/<a[^>]*?href=[\'"](.*?)[\'"][^>]*?>(.*[^>]?)<\/a>/si'; // <-- OK

    if (preg_match_all($pattern,$htmlContentString,$array_pattern,PREG_SET_ORDER)){
    foreach (
    $array_pattern as $val) {

    if (
    $val[2] != '[Link]'){
    $stop=true;
    break;
    }

    }
    }

    if (
    $stop) {
    echo
    header("location: penelope_commentario.php?id=Errore_link1");
    $ctrl = 1;
    }


    if(
    $ctrl == false ) {
    $txt = stripslashes($messaggio);
    fwrite($open, $nikname."|".$data_ora."|".$urlsito."|".$email."|".$txt."|".$img."|".$ip."\r\n");
    $antispam = $_POST['antispam'];
    if (
    $antispam != '') { die("errore antispam"); }

    // chiudiamo il file
    fclose($open);

    // ritorniamo nella pagina di visualizzazione
    echo header("location: penelope_commentario.php?id=conferma");
    exit;
    }

    }
    }
    ?>
    Tu mi sai dire se c'è un bug e ovviamente come risolvere ^__________^
    Grazie^^

  4. #4
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,186

    Predefinito

    Citazione Originalmente inviato da penelopesito Visualizza messaggio
    Ciao Ale, se conosci il nome del file puoi fare eccome, ci sono riuscita anche io con un semplicissimo script^^
    Prego: alemoppo.altervista.org/LABS/testo.txt


    Per lo script, leggendolo "superficialmente" non noto particolari vulnerabilità. L'unica cosa è il controllo antispam, che lo effettui dopo aver scritto sul file , anche se non ho ben capito che controllo sia, perché è sufficiente scriverci qualsiasi cosa, e il controllo risulta con esito positivo.

    Però, il controllo antispam evidentemente non ha nulla a che fare con il problema sopra. Con:

    divertendosi a scrivere tutto ciò che in teoria non potrebbe essere scritto
    Intendi parolacce, | o altro che lo script dovrebbe censurarli?

    Ciao!
    Ultima modifica di alemoppo : 12-10-2012 alle ore 12.12.22

  5. #5
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito

    Hai ragione Ale non sono riuscita a scrivere nel tuo file... grazie per la pazienza nella dimostrazione pratica, io ne ero convinta perchè è come se la persona che invade di messaggi il mio file avesse accesso all'intera cartella potendo leggere tutti i contenuti, ovvero file txt, file filtro ecc. ecc. ma ora davvero non saprei O_o

    In pratica riesce a scrivere nei campi, nome, home e messaggio, parole che non potrebbe, ovvero vietate appunto dai controlli che vengono effettuati

    Il filtro antispam mi pare di averlo trovato qui da voi, in pratica è un campo invisibile nel form e non deve essere compilato altrimenti da errore^^
    Non so che pensare....

  6. #6
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,186

    Predefinito

    Hai provato a scriver le parole vietate, per vedere se i controlli funzionano correttamente?

    Ciao!

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da penelopesito Visualizza messaggio
    Hai ragione Ale non sono riuscita a scrivere nel tuo file... grazie per la pazienza nella dimostrazione pratica, io ne ero convinta perchè è come se la persona che invade di messaggi il mio file avesse accesso all'intera cartella potendo leggere tutti i contenuti, ovvero file txt, file filtro ecc. ecc. ma ora davvero non saprei O_o

    In pratica riesce a scrivere nei campi, nome, home e messaggio, parole che non potrebbe, ovvero vietate appunto dai controlli che vengono effettuati

    Il filtro antispam mi pare di averlo trovato qui da voi, in pratica è un campo invisibile nel form e non deve essere compilato altrimenti da errore^^
    Non so che pensare....
    Il filtro sui campi lo fai sul client via JS?

    Se la risposta è si, allora è proprio quello il problema, perchè basta disattivare JS per eliminare i controlli ...

  8. #8
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito

    Ale: Ho fatto un mare di prove e funziona tutto alla perfezione tra l'altro non so se ti ricordi ma x il filtro parolacce in un file esterno mi hai aiutata tu^^

    Simpleticket: Proprio per il motivo che tu mi dici ho tolto il controllo del form tramite js affidandolo unicamente a php ovvero i controlli vengono effettuati nel file insert, tipo:
    Codice PHP:
    if ($nikname=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_nome1");
    } elseif (
    $messaggio=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_messaggio1");

    }else { ......
    ecc. ecc.

  9. #9
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,186

    Predefinito

    Citazione Originalmente inviato da penelopesito Visualizza messaggio
    Ho fatto un mare di prove e funziona tutto alla perfezione tra l'altro non so se ti ricordi ma x il filtro parolacce in un file esterno mi hai aiutata tu^^
    sìsì, lo ricordo.. ma io non l'avevo provato, perché i vari controlli li avevi fatti te .

    Comunque, se il bug non è in quel sorgente, forse è da ricercare in altri file che scrivono sul txt (se ce ne sono). Altrimenti, occorre analizzare a fondo quello.

    Ciao!
    Ultima modifica di dreadnaut : 12-10-2012 alle ore 19.49.00 Motivo: fix quote

  10. #10
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito

    L'unico file che scrive sul txt è l'insert ovvero:

    Codice PHP:
    <?php include ("gif.php"); ?>

    <?php
    $my_database_txt
    = 'xxxxxxx.txt';

    //ricavo l'ora e la data odierna
    $data_ora = date("d/m/Y H:i:s");
    $ip = $_SERVER['REMOTE_ADDR']; //ip

    if(isset($_POST['invia']))
    {
    if(!
    is_writable($my_database_txt)){
    exit(
    "il file non ha i permessi di scrittura!");
    }
    // riceviamo i dati e li filtriamo
    $bad_char = array("|", "\r\n", "\r", "\n");
    $nikname = str_replace($bad_char, "", $_POST['nikname']);
    $urlsito = str_replace($bad_char, "", $_POST['urlsito']);
    $email = str_replace($bad_char, "", $_POST['email']);
    $messaggio = str_replace($bad_char, "", $_POST['messaggio']);
    $img = str_replace($bad_char, "", $_POST['img']);
    // apriamo il file
    $open = fopen($my_database_txt, "a+");

    if (
    $nikname=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_nome1");
    } elseif (
    $messaggio=="") {
    echo
    header("location: penelope_commentario.php?id=Errore_messaggio1");

    }else {

    // Ban ip
    $bannati=array("173.208.175.250","188.218.25.159","89.210.57.37");

    if(
    in_array($_SERVER['REMOTE_ADDR'],$bannati)) {
    echo
    header("location: penelope_commentario.php?id=Errore_post");
    $ctrl = 1;
    }


    // Controllo parolacce interamente realizzato da Bradiposo
    $file = 'filtro.txt';
    if(
    file_exists($file))
    $parolacce= file($file,FILE_IGNORE_NEW_LINES);
    else echo
    'Il file non è raggiungibile...';

    //controllo url
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $urlsito);
    if (
    $exp[0]!=$urlsito) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_url");
    }
    }


    //controllo nome
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $nikname);
    if (
    $exp[0]!=$nikname) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_nome");
    }
    }


    //controllo messaggio
    for ($i=0; $i < count($parolacce); $i++) {
    $exp = explode($parolacce[$i], $messaggio);
    if (
    $exp[0]!=$messaggio) {
    $ctrl = 1;
    //pag errore
    echo header("location: penelope_commentario.php?id=Errore_messaggio");
    }
    }

    $txt = stripslashes($messaggio);
    $stop_http=false;
    $htmlContentString = $txt;
    $pattern_http_href = '/(http:\/\/|href=[\'"](.*?)[\'"])/si';

    if (
    preg_match_all($pattern_http_href,$htmlContentString,$matches,PREG_SET_ORDER)){
    //come test:
    //echo "<p>matches=";print_r($matches);

    foreach ($matches as $val)

    {

    //come test:
    //echo "<p>val[0]=".$val[0];
    //echo "<p>val[1]=".$val[1];
    //echo "<p>val[2]=".$val[2];

    if ($val[0] == 'http://'){
    $stop_http=true;
    //come test:
    //echo ("<script>alert('Errore: non è ammesso inserire url direttamente, utilizzare il bbcode!')</script>");
    break;
    }
    }
    }

    if (
    $stop_http) {
    echo
    header("location: penelope_commentario.php?id=Errore_link");
    $ctrl = 1;
    }

    $stop=false;
    $htmlContentString = $txt;
    $pattern = '/<a[^>]*?href=[\'"](.*?)[\'"][^>]*?>(.*[^>]?)<\/a>/si'; // <-- OK

    if (preg_match_all($pattern,$htmlContentString,$array_pattern,PREG_SET_ORDER)){
    foreach (
    $array_pattern as $val) {

    if (
    $val[2] != '[Link]'){
    $stop=true;
    break;
    }

    }
    }

    if (
    $stop) {
    echo
    header("location: penelope_commentario.php?id=Errore_link1");
    $ctrl = 1;
    }


    if(
    $ctrl == false ) {
    $txt = stripslashes($messaggio);
    fwrite($open, $nikname."|".$data_ora."|".$urlsito."|".$email."|".$txt."|".$img."|".$ip."\r\n");
    $antispam = $_POST['antispam'];
    if (
    $antispam != '') { die("errore antispam"); }

    // chiudiamo il file
    fclose($open);

    // ritorniamo nella pagina di visualizzazione
    echo header("location: penelope_commentario.php?id=conferma");
    exit;
    }

    }
    }
    ?>
    Quindi se c'è qualche bug dovrebbe essere qui >_<'''

  11. #11
    Data registrazione
    11-07-2009
    Residenza
    Roma
    Messaggi
    163

    Predefinito

    Ragazzi chiedo scusa x l'up so che non dovrei ma mi sono appena ritrovata una quarantina di messaggi idioti nel commentario..... mi potete aiutare a risolvere sta cosa?????

Regole di scrittura

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