Visualizzazione risultati 1 fino 5 di 5

Discussione: Notifica Apache: Download non trovato

  1. #1
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito Notifica Apache: Download non trovato

    Salve a tutti, da un po' di tempo ricevo notifiche via mail circa un download non trovato in un mio sito Altervista, pugniespinaci...
    I messaggi sono tipo questi:
    [indirizzo IP] il giorno 13 September 2020 9:14 non ha trovato il file extra/Schede'..zip

    [indirizzo IP] il giorno 27 September 2020 13:06 non ha trovato il file extra/Schede') AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#..zip

    [indirizzo IP] il giorno 27 September 2020 13:06 non ha trovato il file extra') AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#/Schede..zip
    A me il download del file Schede.zip avviene regolarmente, ho chiesto in un gruppo Facebook collegato al sito se hanno problemi, non ho avuto riscontri.
    Beninteso che il file ha path extra/Storie.zip, non extra/Storie..zip e alternative varie come risulta dalle notifiche, ed è regolato da questo link:
    Codice PHP:
    <a name="Schede" href="getfile.php?<? echo "path=extra&name=Schede"; ?>">Scarica</a>
    getfile.php:
    Codice PHP:
    <?
    $pathname
    = $_GET['path']."/";
    $filename = $_GET['name'];
    $pathfile = $pathname.$filename;

    //estensione dei file da scaricare
    $ext = ".zip";

    //nome directory con i file di testo, compreso lo slash / finale
    $counterdir = "count/";

    //controllo che nell'url ci sia il nome del file da scaricare,
    if(isset($pathfile) && trim($pathfile)) {
    //se il file richiesto esiste, avviene il download
    if (file_exists("$pathfile$ext")) {
    header("Location: $pathfile$ext");
    //apro il file .txt relativo al download richiesto e lo incremento di 1
    $file = fopen("$counterdir/$filename.txt","r");
    $count = fread($file, "100");
    $countplus = ($count + 1);
    fclose($file);
    $fileb = fopen("$counterdir/$filename.txt","w");
    fwrite($fileb, $countplus, "100");
    fclose($fileb);
    //altrimenti, se il file richiesto non esiste, parte l'email di avviso al webmaster e stampo un messaggio di errore
    } else {
    $pathfile = str_replace(">", "&gt;", $pathfile);
    $pathfile = str_replace("<", "&lt;", $pathfile);
    $today = date("j F Y G:i");
    $user_ip = "$_SERVER[REMOTE_ADDR]";
    $to = "xxx"; // mio indirizzo email
    $subject = "Download non trovato";
    $body = "$user_ip il giorno $today non ha trovato il file $pathfile.$ext";
    @
    mail("$to","$subject","$body");
    echo
    "Il file $pathfile$ext non &egrave; disponibile per il download.<br>
    Riprova pi&ugrave; tardi."
    ;
    }
    //altrimenti, se il nome del file non è passato via get, redirect alla pagina precedente
    } else {
    header("Location: extra.php");
    }
    ?>
    Come posso risolvere? C'è qualche comando php deprecato che alcuni browser non interpretano più? Grazie.
    Ultima modifica di dampyr : 27-09-2020 alle ore 14.41.29

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Citazione Originalmente inviato da dampyr Visualizza messaggio
    [indirizzo IP] il giorno 13 September 2020 9:14 non ha trovato il file extra/Schede'..zip

    [indirizzo IP] il giorno 27 September 2020 13:06 non ha trovato il file extra/Schede') AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert("XSS")&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#..zip

    [indirizzo IP] il giorno 27 September 2020 13:06 non ha trovato il file extra') AND 1=1 UNION ALL SELECT 1,NULL,'&lt;script&gt;alert("XSS")&lt;/script&gt;',table_name FROM information_schema.tables WHERE 2&gt;1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#/Schede..zip
    Se noti le richieste, includono pezzi di query che cercano di eseguire Javascript o estrarre dati su disco. Visto che il tuo codice non ha nulla a che fare con il database, non dovrebbero esserci problemi.

    Non sono utenti veri, sono scan automatici che cercano vulnerabilità.

    Detto questo, il codice che hai postato sopra è un po'... rotto, e ti darà problemi con versioni più nuove di PHP.
    Ultima modifica di dreadnaut : 27-09-2020 alle ore 15.01.20

  3. #3
    L'avatar di dampyr
    dampyr non è connesso Utente
    Data registrazione
    07-02-2011
    Residenza
    Corpo a Taranto, cuore a Bari
    Messaggi
    110

    Predefinito

    Citazione Originalmente inviato da dreadnaut Visualizza messaggio
    Detto questo, il codice che hai postato sopra è un po'... rotto, e ti darà problemi con versioni più nuove di PHP.
    Intendi il getfile.php? L'ho già cambiato una volta, proviene da un mio sito precedente... Possibile che non esista un codice "definitivo"?

  4. #4
    GraphOGLRisorse non è connesso AlterGuru 2500
    Data registrazione
    14-02-2015
    Messaggi
    4,003

    Predefinito

    Salve,
    fopen e fread sono supportati anche in php 7, comunque se riscontra problemi anche con utenti reali, può usare in alternativa file_put_contents, che è più recente e forse supportato megilio.

    Cordiali saluti.
    Ultima modifica di GraphOGLRisorse : 27-09-2020 alle ore 23.54.36

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,261

    Predefinito

    Citazione Originalmente inviato da dampyr Visualizza messaggio
    Intendi il getfile.php? L'ho già cambiato una volta, proviene da un mio sito precedente... Possibile che non esista un codice "definitivo"?
    A dire il vero, perché esiste quel file? A cosa ti serve sapere che qualcuno ha usato un link sbagliato?

    Non sarebbe uguale linkare direttamente agli archivi?
    Codice HTML:
    <a href="/extra/Schede.zip" download>Archivio schede</a>
    [edit] Eh, mi ero dimenticato che conti i download 🤦

    Il problema più grosso in realtà è la prima riga: PHP dovrebbe cominciare con <?php invece di <?. Nel passato remoto era possibile usare la versione "corta", ma il default è cambiato anni fa.

    Qua una versione modernizzata: preg_match() per evitare che qualcuno cerchi di scaricare file strani; solo name senza percorso, tanto i file son tutti nello stesso posto; file_get_contents() e file_put_contents() per leggere e scrivere i file; meno stringhe con dentro variabili quando non servono; costanti per la configurazione; status 404 quando il file non viene trovato; htmlspecialchars() per assicurarci di non stampare caratteri particolari.
    Codice PHP:
    <?php
    // disabilitiamo gli errori qua, invece di usare '@'
    error_reporting(0);

    // nome directory con i file di testo, compreso lo slash / finale
    define("COUNTER_DIR", "count/");

    // percorso dei file da scaricare, compreso lo slash / finale
    define("DOWNLOAD_DIR", "extra/");

    // estensione dei file da scaricare
    define("DOWNLOAD_EXT", ".zip");

    $filename = isset($_GET["name"]) ? trim($_GET['name']) : "";

    // niente file, o caratteri non validi? torniamo alla pagine dei download
    if (!preg_match("/^[A-Za-z0-9-]+$/", $filename)) {
    header("Location: extra.php");
    return;
    }

    $fullname = DOWNLOAD_DIR . $filename . DOWNLOAD_EXT;

    if (
    file_exists($fullname)) {
    // apro il file .txt relativo al download richiesto e lo incremento di 1
    $contatore = COUNTER_DIR . $filename . ".txt";
    $visite = file_exists($contatore)
    ?
    intval(trim(file_get_contents($contatore)))
    :
    0;
    file_put_contents($contatore, $visite + 1);

    // redireziono al download
    header("Location: {$fullname}");

    // ed abbiamo finito
    return;
    }

    $nome = htmlspecialchars($fullname);

    // invia la notifica di mancato download
    $today = date("j F Y G:i");
    $user_ip = $_SERVER['REMOTE_ADDR'];
    $to = "xxx"; // mio indirizzo email
    $subject = "Download non trovato";
    $body = "{$user_ip} il giorno {$today} non ha trovato il file '{$nome}'.";
    mail($to, $subject, $body);

    // mostra un messaggio di errore
    header('HTTP/1.0 404 Not Found');
    ?>
    <!doctype>
    <html>
    <head>
    <meta charset="utf-8" />
    <title>Download non trovato</title>
    </head>
    <body>
    <h1>Download non trovato</h1>
    <p>Il file <?= $nome ?> non è disponibile per il download. Riprova più tardi.</p>
    </body>
    </html>
    Ultima modifica di dreadnaut : 28-09-2020 alle ore 20.03.50

Regole di scrittura

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