Censura parole nel testo

1,256 views
Skip to first unread message

massimo vercelli

unread,
Dec 8, 2011, 10:23:43 AM12/8/11
to zb-p...@googlegroups.com
ciao alla lista!!
ho definito nel db un elenco di parole da censurare (nei commenti, blog, post ecc.).

Ora, come posso cercare se nel testo che scrive il visitatore è presente una di quelle parole?

Alessandro Marinuzzi

unread,
Dec 8, 2011, 11:09:25 AM12/8/11
to zb-p...@googlegroups.com
Io sul mio blog e sul mio modulo di contatto php uso il seguente filtro:

1) ti crei un file php che chiamerai keyword.php e ci metti quello che ti posto e che uso tranquillamente da ormai moltissimo tempo con successo:
keyword.php
<?php
$keys = '/\b(zoloft|xanax|viagra|valium|pharm|pharmacy|anale|anali|masturba|masturbi|masturbazione|masturbazioni|pompino|pompini|suca|suche|cazzi|cazzo|fica|fiche|porn|porno|pornografia|pornografici|sessuale|sessuali|pube|penis|pene|peni|vagina|sex|omosex|sesso|fanculo|merda|stronzi|stronzo|bastardo|bastardi|cretino|cretini|deficiente|deficienti|stupido|stupidi|stupid|mentecatto|mentecatti|bullo|bulli|spaccone|spacconi|pedofilo|pedofili|pervertito|pervertiti|depravato|depravati|cacca|cacche|cacchina|cacchine|caccole|caccone|minchia|minchie|minchione|minchioni|frocio|froci|gay|lesbica|lesbiche|lesbian|coglione|coglioni)\b/i';
?>

Poi nelle tue applicazioni php (commenti, post mail...) metti questo include:

2) include("./keyword.php");
poi dove serve fai un controllo del tipo:
3) if (preg_match($keys, stripslashes($_POST['body']))) {
     exit("ERRORE: stai scrivendo usando parole non ammesse!");
   } else {
     // Inoltro il commento/post/mail...
   }

Questa soluzione è la più semplice e ti permette di aggiornare il file keyword.php ogni volta che ne hai bisogno senza dover toccare gli altri script...

Scusate la sfilza di parolacce postate qui ma credo che un esempio concreto valga più di mille parole... naturalmente si può migliorare... ad esempio usando il punto come wildcard nella espressione regolare... (esempio: cavol.|stronz.|eccetera)

il punto sta ad indicare sia stronzo che stronzi così si scrive una parola sola invece di 2...

Spero che il SIGNORE non mi fulmini per aver trascritto tante parolacce nel giorno della MADONNA... ;-)
-- 
Alessandro Marinuzzi
--------------------
http://www.alecos.it
--------------------

massimo vercelli

unread,
Dec 8, 2011, 11:46:11 AM12/8/11
to zb-p...@googlegroups.com
>Questa soluzione è la più semplice e ti permette di aggiornare il
    file keyword.php ogni volta che ne hai bisogno senza dover toccare
    gli altri script...
>Scusate la sfilza di parolacce postate qui ma credo che un esempio concreto valga più di mille parole... naturalmente si può migliorare... ad esempio >usando il punto come wildcard nella espressione regolare... (esempio: cavol.|stronz.|eccetera)
>il punto sta ad indicare sia stronzo che stronzi così si scrive una parola sola invece di 2...

non ho capito due cose: così facendo (e anche come sto facendo io con le parolacce nel db) ad ogni post inserito bisogna controllare un array (nel codice o nel db) di decine di parole. È corretta come strada? Nel mio caso si tratta di una select * from !

Alessandro Marinuzzi

unread,
Dec 9, 2011, 3:13:52 AM12/9/11
to zb-p...@googlegroups.com
Nella form e precisamente nella textarea dove l'utente scrive ti prelevi il contenuto e lo confronti con il file keyword.php. Se non ci sono corrispondenze allora il testo è pulito e lo posti, se invece viene trovata anche una sola parola allora esci con un messaggio di errore... non capisco dove sia il problema...

<TEXTAREA CLASS="body" STYLE="WIDTH: 320px; HEIGHT: 180px" ROWS="11" ID="body" NAME="body" COLS="50"></TEXTAREA>

e poi vai di preg_match così:


if (preg_match($keys, stripslashes($_POST['body']))) {
  exit("ERRORE: stai scrivendo usando parole non ammesse!");
} else {
  // Inoltro il commento/post/mail...
}
Ciao e buone feste a tutti! :-)

Alessandro Marinuzzi

unread,
Dec 9, 2011, 3:40:27 AM12/9/11
to zb-p...@googlegroups.com
Il 08/12/2011 17:46, massimo vercelli ha scritto:
Tieni conto che usare un sistema su file risulta più maneggevole di un db... il file keyword.php lo puoi editare in un secondo mentre invece l'interazione con il db è meno accessibile... io ti consiglio di usare le regex che ti ho postato 2 email fa... includi il file, aspetti che qualcuno posti, poi vai di preg_match e verifichi il tutto. Magari tu sarai abituato a fare tutto con db ma alcune volte il sistema flat file su filesystem è molto più agevole... poi fai tu... ciao :-)

Motosauro

unread,
Dec 9, 2011, 4:16:09 AM12/9/11
to zb-p...@googlegroups.com
Il 09 dicembre 2011 09:40, Alessandro Marinuzzi <aleco...@libero.it>
ha scritto:


Un connubio fra i due approcci che spesso uso è sqlite: veloce come un
flatfile, interrogabile come un db
M

Marcello Vezzelli

unread,
Dec 12, 2011, 5:02:53 PM12/12/11
to zb-p...@googlegroups.com
Il 08/12/2011 17.09, Alessandro Marinuzzi ha scritto:


Spero che il SIGNORE non mi fulmini per aver trascritto tante parolacce nel giorno della MADONNA... ;-)

La cosa più divertente è che lo script consente tutte le bestemmie :)

ciao
Marcello

Massy

unread,
Dec 12, 2011, 5:18:27 PM12/12/11
to zb-p...@googlegroups.com
Il 12 dicembre 2011 23:02, Marcello Vezzelli <marc...@vezz.it> ha scritto:
> La cosa più divertente è che lo script consente tutte le bestemmie :)

Ahahah, non sono il solo che ha controllato tutte le bestemmie a
quanto pare.. :D
--
Massy

Alessandro Marinuzzi

unread,
Dec 13, 2011, 4:27:37 AM12/13/11
to zb-p...@googlegroups.com
Ciao, non so come lo avete implementato VOI ma a me funziona alla perfezione:

http://www.alecos.it/eml/mail.php

provate a mettere una delle parole contenute nella regex e vedrete che avrete un bel messaggio che vi dice Messaggio Email non valido e non spedisce nulla...

provate con zoloft... immettete zoloft nello spazio destinato al messaggio e vedrete che vi rifiuta l'invio... poi provate a togliere zoloft e vedrete che invia... :-)

Scrivete ad esempio... "Nel mezzo del cammin della mia vita mi ritrovai nella selva soloft"

Non so perché a voi non funzioni ma per me va che è una meraviglia... chissà che pasticci ci avete combinato VOI ;-)

giovanni battista lenoci

unread,
Dec 13, 2011, 4:30:16 AM12/13/11
to zb-p...@googlegroups.com
> La cosa più divertente è che lo script consente tutte le bestemmie :)

Ahahah, non sono il solo che ha controllato tutte le bestemmie a
quanto pare.. :D

Tra l'altro questo metodo permette l'evoluzione, la gente ne cerca di nuove non censurate arricchendo il patrimonio. :D

 
--
Giovanni Battista Lenoci - Ueppy Technical Manager    
Via Piedo 58, 23020 Tresivio (SO)
+39 347 7196482
gia...@ueppy.com - http://www.ueppy.com/

Alessandro Marinuzzi

unread,
Dec 13, 2011, 4:30:16 AM12/13/11
to zb-p...@googlegroups.com
Il 13/12/2011 10:27, Alessandro Marinuzzi ha scritto:
Scrivete ad esempio... "Nel mezzo del cammin della mia vita mi ritrovai nella selva soloft"

Scrivete ad esempio... "Nel mezzo del cammin della mia vita mi ritrovai nella selva zoloft"

Marcello Vezzelli

unread,
Dec 13, 2011, 4:54:18 AM12/13/11
to zb-p...@googlegroups.com
Il 13/12/2011 10:30, giovanni battista lenoci ha scritto:

> La cosa più divertente è che lo script consente tutte le bestemmie :)

Ahahah, non sono il solo che ha controllato tutte le bestemmie a
quanto pare.. :D

Tra l'altro questo metodo permette l'evoluzione, la gente ne cerca di nuove non censurate arricchendo il patrimonio. :D

E' una lotta persa, anni fa tentai di programmare un bot irc per intercettare bestemmie e improperi vari, ma gli utenti erano diabolici... le madonne in leet speak :)

Se posso permettermi un suggerimento, anziché bloccare l'utente dicendogli che il post non è accettabile, conviene censurare direttamente le parole lasciando le iniziali e sostituendo il resto con asterischi o altro, una sorta di effetto "bip".

Se il blog è un wordpress, ci sono parecchi plugin che operano in questo modo (cercare bad words).
Se invece è roba custom, una semplice str_replace con due array può risolvere la cosa.

ciao
Marcello

Alessandro Marinuzzi

unread,
Dec 13, 2011, 5:09:53 AM12/13/11
to zb-p...@googlegroups.com
Ragazzi ecco un esempio pratico che allego, testatelo pure quanto volete... ciao vado di fretta.
test.zip

Alessandro Marinuzzi

unread,
Dec 13, 2011, 8:40:58 AM12/13/11
to zb-p...@googlegroups.com
Il 13/12/2011 10:54, Marcello Vezzelli ha scritto:
> E' una lotta persa, anni fa tentai di programmare un bot irc per
> intercettare bestemmie e improperi vari, ma gli utenti erano diabolici...
> le madonne in leet speak :)
>
> Se posso permettermi un suggerimento, anzich� bloccare l'utente dicendogli
> che il post non � accettabile, conviene censurare direttamente le parole

> lasciando le iniziali e sostituendo il resto con asterischi o altro, una
> sorta di effetto "bip".
>
>
Non sono d'accordo per due motivi:

1) Se lasci passare un post o una email con spam e parolacce varie chi di
turno sapr� che quel sistema � vulnerabile e riempir� con cataste di
post/email inutili il tuo server
2) Se lasci passare parolacce censurate ti ritroverai il sito pieno di
asterischi (bip) ovunque e credimi sar� un vero divertimento per il cretino
di turno

INVECE

1) Se blocchi post/email del cretino di turno quel cretino capir� che non
pu� scherzare e giocare con il tuo server e capir� che il sistema �
invulnerabile
2) Se blocchi post/email del cretino di turno eviterai di ritrovarti il
sito/forum/blog o email box pieno di tantissimi bip :-P

La mia esperienza...

Avevo uno spammer cretino che si divertiva a inondarmi il blog di
immondizia. Da quando ho usato il sistema di censura lo spmmer � scomparso
completamente...

Poi io faccio un'altra cosetta interessante... quando mi arriva un commento
mi giunge tra gli headers due indirizzi IP:

1) Il primo prelevato da remote address
2) il secondo prelevato da proxy

Se gli indirizzi IP combaciano inserisco una regola nel file .htaccess per
inibire l'accesso al mio blog da quel determinato IP
Se gli indirizzi IP non collimano evidentemente sta usando un proxy e allora
inserisco due regole nel file .htaccess per i due IP

In questo modo allontano lo spammer di turno definitivamente... ossia "Non
tornare pi�!" :-P

Naturalmente tutto questo lo posso fare in quanto il mio blog usa codice
proprietario scritto a mano esclusivamente da me :-)
> ciao
> Marcello

ziobudda@gmail

unread,
Dec 13, 2011, 8:46:08 AM12/13/11
to zb-p...@googlegroups.com
Il giorno 13/dic/2011, alle ore 14:40, Alessandro Marinuzzi ha scritto:

Non sono d'accordo per due motivi:
[SNIP]

Fare entrambe le cose non sarebbe male.


Naturalmente tutto questo lo posso fare in quanto il mio blog usa codice
proprietario scritto a mano esclusivamente da me :-)

Questa cosa la puoi fare anche con Drupal.

M.

--
Michel 'ZioBudda' Morelli                       mic...@ziobuddalabs.it
Sviluppo applicazioni CMS DRUPAL e web dinamiche (LAMP+Ajax)
0200619074 - 3939890025 (mobile)--  Fax: +39-0291390660
http://www.ziobuddalabs.it                      Skype: zio_budda

Reply all
Reply to author
Forward
0 new messages