Trucchi per le parole da guardare

Mentre convertivo un’ampia lista di parole monitorate in espressioni regolari, ho individuato alcuni modi per aggirare i filtri. Questi metodi sembrano funzionare sia per le parole monitorate “normali” che per le espressioni regolari.

Doppi spazi: se la tua parola monitorata è parola vietata, è possibile aggirare il filtro inserendo più spazi tra le due parole. Una curiosità è che nel post elaborato i doppi spazi vengono rimossi, rendendoli completamente invisibili nel testo finale.

  • per prevenire questo usando espressioni regolari: utilizza parola\s*vietata
  • per prevenire questo senza espressioni regolari: non ho trovato una soluzione.

Usa gli underscore per aggirare i limiti delle parole:
senza regex: se circondi una parola monitorata con degli underscore, questa verrà stampata in corsivo e sarà consentita. Quindi _vietato_ verrà accettato se il tuo filtro è vietato.
con regex: normalmente i limiti delle parole vengono controllati solo se si utilizza \b, e in quel caso l’underscore li supera. Quindi _vietato_ verrà accettato se il tuo filtro è \bvietato\b.

  • per prevenire questo usando espressioni regolari: usa [\b\_] al posto di \b
    MODIFICA: questo sembra non funzionare bene.
    Anche rimuovere i limiti delle parole potrebbe funzionare, ma si rischia di bloccare accidentalmente parole come cumulativo e titolo :wink:
  • per prevenire questo senza espressioni regolari: non ho trovato una soluzione.
7 Mi Piace

Giusto, in genere non ci impegniamo a combattere questo tipo di cose perché esistono molti trucchi “astuti” per aggirare qualsiasi blocco di parole. Unicode è uno spazio enorme, davvero enorme.

4 Mi Piace

In effetti, abbiamo provato a farlo su un certo numero di grandi progetti educativi tempo fa.

Prima di essere abbandonato, è stato messo in produzione il matching approssimativo, che ha prevedibilmente causato ogni sorta di problemi per i casi d’uso legittimi.

3 Mi Piace

Le parole monitorate sono principalmente una “prima linea di difesa” contro le parole inappropriate. È comunque necessario che la comunità segnali i tentativi di aggiramento e le violazioni.

Nessuna espressione regolare che tu possa ideare sarà in grado di rilevare un image.

9 Mi Piace

Solo per farti sapere, [] è per le “classi di caratteri”. Nelle espressioni regolari di Perl, e probabilmente anche in quelle di Ruby, \b è un “confine di parola” al di fuori di una classe di caratteri e “backspace” all’interno di una classe di caratteri. In C, ‘\b’ è sempre backspace (<control-H> per essere precisi). Il backspace non è un carattere utile nella maggior parte dei casi, mentre i confini di parola lo sono, da qui la ridefinizione.

Per usare un’espressione regolare per catturare “_forbidden_” o “forbidden”, userei probabilmente:

\b_?forbidden_?\b

(So anche come codificare tutte le mie lettere in &#xXX; per evitare trucchi Unicode o l’espressione regolare.)

3 Mi Piace

Non avevo mai notato che ci fosse una differenza a seconda del contesto. Grazie per la spiegazione! :slight_smile:

2 Mi Piace