I come Informatica - I como Informática - I for Information Technology
PORTALE
PORTAL
PORTAL
FORUM
FORO
FORUM
Informatica
Informática
Information Technology
Stefano Pederzani
Consulente informatico
ARTE
Homepages
Curricula
Curricula
Resumes
Pubblicità
Publicidad
Advertisement




IT PHPBB BUGS AND PATCHES

Non solo amministrazione.
No solo administración.
Not only administration.

IT PHPBB BUGS AND PATCHES

Postby stefanopederzani » Sun Apr 14, 2013 3:58 pm

April 9, 2013 - PHPBB BUGS AND PATCHES by Stefano Pederzani

That strange sensation of something going wrong. The untouchable feel of bug shimmering in the air around you...
And the confirm! PhpBB failed! I have just seen it!
Version: 3.0.7-PL1-5 (Debian)
When you administer a forum, like in PhpBB, you often ban an IP address. Yes, you must first consider that many people around the world have dynamic addresses, but when the same kind of spam comes from the same IP you just ban that IP. I use to keep a text file where I write down the IP ascending. I separate the networks with a horizontal line of dashes, and I specify the IP range taken from the whois, well provided near the IP by the PhpBB user administration in ACP. I take note of the IPs, and then I delete the user. The second time an IP spams, I ban the IP.
In order to punish the spammer, I go through the MySQL database searching for other users from the same IP, subscribed before I did the IP ban, to delete them.
When you search for users in ACP, a pop-up windows appears, with a form on top to fill in, and one of the fields is the IP. This method works with asterisks in place of numbers when you are specifying a subnet.
For example the subnet 46.118.158.0, written in technical correct form, in the whois is referred to as "46.118.158.0 - 46.118.158.255", not in the classic 46.118.158.0/24 way. This is for newbies, maybe, but is a very simple and immediate representation.
In the pop-up form, instead, you have to write it as 46.118.158.*
I do not suggest to ban subnets, because it is not justice for the other users of that net. Sometimes it seems a pirate bay, where all are spammers, but you are cutting out potential clients that nothing of it deserve.
Specified this, you can just try out to enter a single IP and see which users are registered from it... And strange results you will obtain!
Doing this work everyday, happens to remember at-the-fly some IPs, and I realized that something was going wrong. It is very disappointing, when some of the result users have just a different IP!
So I connected to MySQL database from command line, I choosed the DB "phpbb" and then queried to the table "phpbb_users". I immediately realized that all my checks done until that moment were nothing useful. My DB was FULL of users subscribed from IP I then banned! Horrible.
So I wrote a script. Below you can read the SQL statement inside a shell-script if you want to estract it.
In the same days, I was trying to unban some subnets, for the reason explained above. And again the ACP fails to unban anything! I am pretty sure the first times I did it, it worked. But since a day and on, I noticed that almost every IP, with asterisks or not, appears doubled in the list. Lately I was not able to unban anyone from the ban list. Damn.
I wrote a second statement to do it from mysql command line interface (CLI). My lazyness told me to include it in the same shell-script, and I create a little menu. Again you can extract the statement or copy the entire script if you like it, but I signal the must to be SQL skilled to do what I did, a skill you should not be requested to, to administer PhpBB.
The script askes you for the MySQL root password (it is not suggested to store it on the server, anywhere). But in this was you must enter it ONCE, while the script access the DB every time.

Code: Select all
############################ MAIN #########################################
echo "Insert password for root:"
read ROOTPWD

while true ; do
        echo "1 - Select an IP range from users"
        echo "2 - Unban an IP from banlist"
        read CHOICE

        case ${CHOICE} in

        1)
        echo "Enter an IP range to select:"
        read IPRANGE

        #mysql -u root -p phpbb3 <<EOS
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS

        select username, user_ip
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        order by user_ip
        ;
        select count(*)
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        ;
EOS
        ;;

        2)
        echo "Enter an IP to UNban:"
        read IPRANGE

        #mysql -u root -p phpbb3 <<EOS
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS


        delete from phpbb_banlist where ban_ip='${IPRANGE}';
EOS
        ;;

        *)
        echo "------------------------------------>Enter 1 or 2"
        ;;
        esac

        echo "Ctrl-C to exit"

done


When you select "1 - Select an IP range from users", you will enter an IP range or an IP and you will obtain a list of username. You must delete them from the ACP because the related tables must be managed by PhpBB. Copy and paste the names from your terminal windows to the user management. Check everytime that the IP corresponds, and check the other characteristics (sometimes they own messages). When finished, repeat the query in the script by retyping 1 (one) and verify no users remain.

When you select "2 - Unban an IP from banlist" the IP or IP range with asterisks will be deleted directly - no messaged will be displayed.
If you failed the choice, just re-ban it using the ACP, and go on.

I will take track of eventual bugs coming out more. And make a patch. But now...
Enjoy!
Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 156
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna

Re: PHPBB BUGS AND PATCHES

Postby stefanopederzani » Sun May 04, 2014 12:24 am

9 APRILE 2013 - BUGS e le patch di phpBB di Stefano Pederzani

Quella strana sensazione che qualcosa vada storto. La sensazione intoccabile di bug luccicante in aria intorno a voi ...
E la conferma! PhpBB ha fallito! Ho appena visto!
Versione: 3.0.7 - PL1 - 5 (Debian)
Quando si amministra un forum, come in PhpBB, spesso escludere un indirizzo IP. Sì, è necessario considerare che molte persone in tutto il mondo hanno indirizzi dinamici, ma quando lo stesso tipo di spam proviene dallo stesso IP appena bannate che IP. Io uso per mantenere un file di testo in cui scrivo l'ascendente IP. Separo le reti con una linea orizzontale tratteggiata, e specificare l'intervallo IP preso dal whois, ben fornito vicino al IP dall'amministrazione utente PhpBB nei paesi ACP. Prendo atto della PI, e poi eliminare l'utente. La seconda volta uno spam IP, banno l'IP.
Per punire lo spammer, vado attraverso il database MySQL alla ricerca di altri utenti dallo stesso IP, sottoscritti prima ho fatto il divieto IP, per eliminarle.
Quando si cercano gli utenti nei paesi con ACP, appare un pop-up, con un modulo sulla parte superiore per compilare, e uno dei campi è l' IP. Questo metodo funziona con asterischi al posto dei numeri quando si specifica una sottorete.
Per esempio la subnet 46.118.158.0, scritto in forma tecnica corretta, nel whois è indicato come " 46.118.158.0 - 46.118.158.255 " , non nel classico modo 46.118.158.0/24 (CIDR). Questo è per neofiti , forse , ma è una rappresentazione molto semplice e immediato.
Nella maschera popup, invece, si deve scrivere come 46.118.158.*
Io non suggerisco di vietare sottoreti, perché non è giusto per gli altri utenti di quella rete. A volte sembra una baia dei pirati, dove tutti sono gli spammer, ma si stanno tagliando fuori potenziali clients che nulla di esso merita.
Specificato questo, si può solo provare ad entrare in un unico IP e vedere quali utenti sono registrati da esso ... E strani risultati otterrete!
Facendo questo lavoro quotidiano, capita di ricordare a memoria alcuni IP, e ho capito che qualcosa stava andando storto. E ' molto deludente, quando alcuni degli utenti risultati hanno solo un diverso IP!
Così ho collegato al database MySQL da linea di comando, ho scelto il "phpBB3" DB e poi interrogato per la tabella "phpbb_users". Mi sono subito reso conto che tutti i miei controlli eseguiti fino a quel momento erano niente di utile. Il mio DB era pieno di utenti iscritti da IP che ho poi bannato! Orribile.
Così ho redatto uno script. Qui di seguito potete leggere la dichiarazione SQL all'interno di uno script di shell.
Negli stessi giorni, stavo cercando di riabilitare alcune sottoreti, per il motivo spiegato sopra. E ancora una volta da ACP non funziona unban! Sono abbastanza sicuro che le prime volte l'ho fatto, ha funzionato. Un giorno ho notato che quasi ogni IP, con asterischi o no, appare raddoppiato nella lista. Ultimamente non ero in grado di rimuovere i ban dall'elenco divieto. Dannazione.
Ho scritto un secondo statement per farlo da riga di comando interfaccia mysql (CLI). La mia pigrizia mi ha suggerito di includerlo nello stesso script di shell, e creo un piccolo menu. Anche in questo caso è possibile estrarre l'istruzione o copiare l' intero script, se ti piace, ma io segnalo che devi essere abile con SQL per fare quello che ho fatto, una abilità che non dovrebbe essere richiesta all'interessato, per amministrare PhpBB.
Lo script chiede la password di root di MySQL (non si consiglia di memorizzare sul server , ovunque) . Ma in questa maniera è necessario immetterla una volta sola, mentre lo script accede al DB ogni volta .

Code: Select all
############################ MAIN #########################################
echo "Insert password for root:"
read ROOTPWD

while true ; do
        echo "1 - Select an IP range from users"
        echo "2 - Unban an IP from banlist"
        read CHOICE

        case ${CHOICE} in

        1)
        echo "Enter an IP range to select:"
        read IPRANGE

        #mysql -u root -p phpbb3 <<EOS
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS

        select username, user_ip
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        order by user_ip
        ;
        select count(*)
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        ;
EOS
        ;;

        2)
        echo "Enter an IP to UNban:"
        read IPRANGE

        #mysql -u root -p phpbb3 <<EOS
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS


        delete from phpbb_banlist where ban_ip='${IPRANGE}';
EOS
        ;;

        *)
        echo "------------------------------------>Enter 1 or 2"
        ;;
        esac

        echo "Ctrl-C to exit"

done


Quando si seleziona "1 - Selezionare un intervallo di indirizzi IP da parte degli utenti " , si entra un intervallo IP o un IP e si otterrà un elenco di nome utente. È necessario eliminarli dalla ACP perché le tabelle correlate devono essere gestiti da PhpBB. Copia e incolla i nomi dalla tua finestra di terminale per la gestione degli utenti. Controlla ogni volta che l'indirizzo IP corrisponda, e controlla le altre caratteristiche (a volte proprio i messaggi). Al termine, ripetere la query dello script o ridigitare 1 (uno) e verificare che non rimanga nessun utente.

Quando si seleziona " 2 - UNBAN un IP dal banlist " l'IP o intervallo IP con asterischi saranno cancellati direttamente - nessun messaggio verrà visualizzato.
Se non siete riusciti la scelta, appena ri-Ban utilizzando l'ACP, e andare avanti.

Prenderò traccia di eventuali bug man mano che si presentano. E farò una patch. Ma adesso ...
Buon divertimento!
Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 156
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna

Re: PHPBB BUGS AND PATCHES

Postby stefanopederzani » Sun May 04, 2014 12:29 am

Many more statements have been added.
Here's the new code:

Molti altri statement sono stati aggiunti.
Ecco il nuovo codice:

Code: Select all
# Question array
QUESTION[1]="Enter an IP range to select:"
QUESTION[2]="Enter an IP to UNban:"
QUESTION[3]=""
QUESTION[4]=""
QUESTION[5]=""

############################ MAIN #########################################
echo "Insert password for root:"
read ROOTPWD
#Default
LASTCHOICE=3

while true ; do
        echo "1 - Select an IP range from users"
        echo "2 - Unban an IP from banlist"
        echo "3 - List multiple users per IP"
        echo "4 - List user with no posts (bot excluded)"
        echo "5 - Assign to IP field the name string (for BOTs)"
        echo "6 - View most read topics"
        echo "R - Repeat last command"
        read CHOICE

        #if [ ${CHOICE} = 'R' -o ${CHOICE} = 'r' ] ; then
        if [ ${CHOICE} = 'R' ] || [ ${CHOICE} = 'r' ] ; then
                # Repeat last choice and argument
                CHOICE=${LASTCHOICE}
                ARGUMENT=${LASTARGUMENT}
        else
                echo "${QUESTION[${CHOICE}]}"
                read ARGUMENT
                # Save choice and argument for the next time
                LASTCHOICE=${CHOICE}
                LASTARGUMENT=${ARGUMENT}
        fi

        case ${CHOICE} in

        1)
        #echo "Enter an IP range to select:"
        #read IPRANGE
        IPRANGE=${ARGUMENT}

        #mysql -u root -p phpbb3 <<EOS
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS

        select username, user_ip
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        order by user_ip
        ;
        select count(*)
        from phpbb_users
        where user_ip like '${IPRANGE}%'
        ;
EOS
        ;;
                                      ;;

        2)
        echo -n "IP bannati: "
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS
        select count(*)
        from phpbb_banlist;
EOS
        #echo "Enter an IP to UNban:"
        #read IPRANGE
        IPRANGE=${ARGUMENT}

        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS


        delete from phpbb_banlist where ban_ip='${IPRANGE}';
        select count(*)
        from phpbb_banlist;
EOS
        ;;

        3)
        echo "3 - List multiple users per IP"
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS
        select count(username), user_ip
        from phpbb_users
        group by user_ip
        order by 1,2;
EOS
        #echo "# 151.42.135.215 era il mio IP quando ho creato i miei utenti"
        echo "(empty IP are the BOT users, set it with the name to avoid rejecting)"
        ;;


        4)
        echo "4 - List user with no posts (bot excluded)"
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS
select phpbb_users.username, FROM_UNIXTIME(phpbb_users.user_regdate),
count(phpbb_posts.poster_id) as N
from phpbb_posts RIGHT OUTER JOIN phpbb_users
ON phpbb_posts.poster_id = phpbb_users.user_id
where phpbb_users.group_id != 6
group by phpbb_users.username
having count(phpbb_posts.poster_id) = 0
order by phpbb_users.user_regdate
;
EOS
        ;;

        5)
        echo "5 - Assign to IP field the name string (for BOTs)"

        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS
update phpbb_users
set user_ip=username
where user_ip=''
;
select username, user_ip, FROM_UNIXTIME(user_regdate), group_id
from phpbb_users
where phpbb_users.group_id = 6
order by 3
;
EOS
        ;;

        6)
        echo "6 - View most read topics"
        mysql -u root --password=${ROOTPWD} phpbb3 <<EOS
select topic_id, topic_views from phpbb_topics order by topic_views;
EOS
        ;;

        *)
        echo "------------------------------------>Enter 1 to 5 or R"
        ;;
        esac

        echo "Ctrl-C to exit"

done

Amministratore di sistemi Unix e DBA dal 1995
http://pepe.mi.bo.it/SITO_Curricula/CV_ ... efano.html
User avatar
stefanopederzani
 
Posts: 156
Joined: Tue Sep 18, 2012 12:43 am
Location: Bologna


Return to Database - Bases de datos - Databases



Who is online

Users browsing this forum: No registered users and 0 guests





CV di Stefano Pederzani




I come Informatica - I como Informática - I for Information Technology
Vai al PORTALE - Ir a el PORTAL - Go to PORTAL
Stefano Pederzani
Consulenze informatiche Bologna
Automatic barriers and access control
Barriere stradali e controllo accessi
MMS IMPIANTI
Cablaggio strutturato - telefonia
Elettricità - climatizzazione
cron