Di come un bug in uno script PHP possa mettere in ginocchio un sito

Il sito in questione è il mio, tuttoeniente.net, che ha un sistema creato da me per visualizzare le ultime notizie in ogni pagina. Per ovvie ragioni di spazio non posso visualizzare la notizia completa, quindi la tronco a 70 caratteri.

Tagliare brutalmente porterebbe ad avere 9 volte su 10 parole a metà, quindi avevo scritto uno stupidissimo script che taglia allo spazio successivo. Eccolo:

function ultime_news($notizie = 2, $forumid = 10, $cut = 70){
    $news = '';
    $q_news = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT $notizie");
    while($notizia = mysql_fetch_array($q_news)){
       $lenght = strlen($notizia['testo']);
       if($lenght > $cut){
            while(substr($notizia['testo'], $cut, 1) != ' '){
                $cut++;
            }
            $testo = substr($notizia['testo'], 0, $cut).' [...]';
        }else{
            $testo = substr($notizia['testo'], 0, $cut);
        }
        $data = strftime("%d/%m/%Y", $notizia['data']);
        $news .= "<p><a href=\"/news/$notizia[id]-".encode_for_url($notizia['titolo']).
                 ".html\"><span class=\"news-title\">$notizia[titolo]</span></a> ".
                 "<span class=\"news-date\">($data)</span><br />".
                 "<span class=\"news-text\">$testo</span></p>";
    }
    return $news;
}

Tutto bene, se non fosse che l’ultima notizia che ho inserito è “Si aggiungono nuove barzellette alla nostra collezione, corri a leggerle!”, 74 caratteri. A 70 caratteri siamo giusto a metà della parola “leggerle”, quindi avanziamo alla ricerca di uno spazio. Lettera, lettera, lettera, punto esclamativo. Fine. Nessuno spazio. Risultato? Loop infinito e sito KO. Peccato che quando ho inserito la notizia non ci ho fatto caso, e oggi ho dovuto smadonnare non poco prima di trovare la ragione del sito fuori uso…
La solulzione? Una banalissima limitazione dello spostamento del taglio fino alla lunghezza totale della notizia.
In pratica while(substr($notizia['testo'], $cut, 1) != ' '){ diventa while(substr($notizia['testo'], $cut, 1) != ' ' && $cut <= $lenght){

Fonera #2: abilitare l’interfaccia web dalla LAN

Fonera

Come opzione predefinita non è possibile accedere all’interfaccia web della Fonera tramite un altro PC connesso alla LAN in cui è presente anche la Fonera. Dopo aver abilitato SSH, sono sufficienti due semplici passaggi, ovviamente dopo essersi connessi:

  • Inserire in /etc/firewall.user le seguenti righe (usiamo VI per editare: vi /etc/firewall.user)

# Apriamo la porta 80 sulla LAN
iptables -t nat -A prerouting_rule -i $WAN -p tcp –dport 80 -j ACCEPT
iptables -A input_rule -i $WAN -p tcp –dport 80 -j ACCEPT

  • /etc/init.d/S45firewall restart per riavviare il firewall e applicare la modifica

Adesso basta connettersi alla propria LAN (anche in wireless, se avete un router + access point) e puntare il browser verso l’IP assegnato alla Fonera, nel mio caso 192.168.1.200

Abilitare SSH sulla Fonera con firmware 0.7.2 r3

La Fonera è il social router distribuito da Movimiento FON, e da ieri sono il felice possessore di uno di questi aggeggini.

La fonera in tutto il suo splendore

In realtà l’antenna è bianca…

Questo simpatico scatolotto (è più piccolo di una mano) è basato su linux (Kernel 2.4.32) e sul firmware OpenWrt, rivisto e corretto da FON. Purtroppo, però, non è possibile accedere via SSH, e bisogna procedere ad un hack più o meno complesso a seconda della versione firmware che è installato sulla Fonera. Io ero lo sfortunato possessore di un esemplare con firmware 0.7.2 r3, resistente agli attacchi usati in precedenza, in particolare quelli descritti in questo post del blog di Paolo Gatti. Questo, in pratica, redirigeva le richieste DNS della Fonera ad un altro server, 88.198.165.155, che è stato appositamente studiato per riportare la Fonera al firmware 0.7.1 r1, attaccabile tramite una code-injection.

Continue reading