Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    8

    [RegExp] Come posso migliorare la funzione HtmlSpecialChars ?

    Ho necessità di creare una funzione che mi ripulisca una stringa da caratteri potenzialmente pericolosi: maggiore, minore, virgolette, apostrofo.

    Potrei usare HtmlSpecialChars, ma... ci sono alcuni MA:
    1. HtmlSpecialChars converte anche il carattere "&" che invece mi serve invariato (rischierei di trovarmi nella situazione di avere "&" convertito in "&"; e, comunque, la "&" mi sta bene che rimanga.
    2. HtmlSpecialChars converte i caratteri maggiore, minore, ecc. nelle rispettive entità ">", "<", ecc. mentre io voglio che vengano convertiti in "" (stringa vuota).

    Ho realizzato questa funzione, tentando di farla a prova di "figlio di buona donna":

    function clean($parm='') {
    return( preg_replace( array( "/>|%3e|&#?0*62;/i", "/<|%3c|&#?0*60;/i", "/\"|%22|&#?0*34;/", "/'|%27|&#?0*39;/"), array( "", "", "", ""), $parm));
    }

    che mi funziona se la provo con un programma stand-alone (visual_regexp-3.1.exe), ma non ne vuole sapere di lavorare bene una volta "online" (con EasyPHP 2.0.0.0 in locale sotto WinXP senza modificare la configurazione standard).

    Esito del test sul primo pattern (quello che controlla il carattere ">").
    N.B.: aggiunto uno spazio prima e dopo il carattere "&" per evitare traduzioni automatiche del forum.

    Stringa di esempio 1: abc>def & 62;ghi%3elmn
    Output con visual_regexp-3.1.exe: abcdefghilmn --> funziona
    Output online: abcdefghilmn --> funziona

    Stringa di esempio 2: abc>def & 0000000000062;ghi%3elmn (aggiunti zeri a valontà per simulare il comportamento di qualche f.d.b.d.)
    Output con visual_regexp-3.1.exe: abcdefghilmn --> funziona
    Output online: abcdefghilmn --> funziona

    Stringa di esempio 3: abc>def & #62;ghi%3elmn
    Output con visual_regexp-3.1.exe: abcdefghilmn --> funziona
    Output online: abcdef>ghilmn --> NON funziona

    Stringa di esempio 4: abc>def & #000000000000062;ghi%3elmn
    Output con visual_regexp-3.1.exe: abcdefghilmn --> funziona
    Output online: abcdef>ghilmn --> NON funziona

    OK. Al termine di questa sbrodolata, qualcuno mi sa aiutare?

    Grazie e (visto il periodo) auguroni!

  2. #2
    Una versione modificata di HtmlSpecialChars secondo le tue necessita:

    1. HtmlSpecialChars converte anche il carattere "&" che invece mi serve invariato (rischierei di trovarmi nella situazione di avere "&" convertito in "&amp;"; e, comunque, la "&" mi sta bene che rimanga.
    2. HtmlSpecialChars converte i caratteri maggiore, minore, ecc. nelle rispettive entità "&gt;", "&lt;", ecc. mentre io voglio che vengano convertiti in "" (stringa vuota).
    Codice PHP:
    <?php 

    function clean($content '') {
        
    $result $content;
        
    $result str_replace('<'''$result);
        
    $result str_replace('>'''$result);
        
    $result str_replace('"'''$result);
        
    $result str_replace("'"''$result);
        return 
    $result;
    }

    function 
    preg_clean($content '') {
        return 
    preg_replace('#[<>"\\\\']#', '', $content);
    }

    ?>
    Tieni presente che le versioni codificate di > e < etc. (es. #xx;, %xx etc.) non sono pericolose dal punto di vista della sicurezza perche' il browser non le interpretera' mai come facenti parte di un tag HTML ne il database server le interpretera' come delimitatori di stringhe (es. per attacchi di SQL Injection).

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    8
    Originariamente inviato da filippo.toso
    Una versione modificata di HtmlSpecialChars secondo le tue necessita: (...)
    OK, grazie!

    Un paio di chiarimenti, please.

    1) Da quanto capisco, la funzione preg_clean è la versione "regexp" della funzione clean. Giusto?

    2) A parte le considerazioni sulla sicurezza (grazie per avermi tranquillizzato) cosa c'è di sbagliato nella regexp da me elaborata che le fa avere quel funzionamento disomogeneo?
    In altre parole: mi hai dato un pesce; mi insegni a pescare?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.