Visualizzazione risultati 1 fino 5 di 5

Discussione: Problema con funzione da me scritta

  1. #1
    Guest

    Predefinito Problema con funzione da me scritta

    Salve.
    Ho scritto questa funzione per il mio guestbook, in modo da usare le emoticons e il bbcode ma non permettere di usare i tag di php e di script.
    Ve la posto:
    Codice PHP:
    <?php
    function noxss($str) {
    $patterns[0] = "/<script>/";
    $patterns[1] = "/<\/script>/";
    $patterns[2] = "/onerror/";
    $patterns[3] = "/<?/";
    $patterns[4] = "/<?php/";
    $patterns[5] = "/?>/";

    $replacements[0] = "&lt;script&gt;";
    $replacements[1] = "&lt;/script&gt;";
    $replacements[2] = "onerroor";
    $replacements[3] = "&lt;?";
    $replacements[4] = "&lt;?php";
    $replacements[5] = "?&gt;";

    return
    preg_replace($patterns, $replacements, $str);
    }
    ?>
    Lo spunto l'ho trovato in un sito tempo fa.
    Il problema è che mi restituisce un sacco di parentesi (< e >) per ogni scritta passata per argomento.
    Pagina di prova: http://gabryhacker.altervista.org/esempi/guestbook/
    Dove sbaglio?

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    O impari le espressioni regolari del Perl oppure usa str_replace. Hai fatto confusione.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Veramente io ho visto qualcosa di simile nel php.net: http://www.php.net/manual/it/function.preg-replace.php guarda il secondo esempio.
    EDIT:
    ho fatto così:
    Codice PHP:
    <?php
    function noxss($str) {
    $patterns[0] = "/<script>/";
    $patterns[1] = "/<\/script>/";
    $patterns[2] = "/onerror/";
    $patterns[3] = "/<?/";
    $patterns[4] = "/<?php/";
    $patterns[5] = "/?>/";

    $replacements[0] = "&lt;script&gt;";
    $replacements[1] = "&lt;/script&gt;";
    $replacements[2] = "onerroor";
    $replacements[3] = "&lt;?";
    $replacements[4] = "&lt;?php";
    $replacements[5] = "?&gt;";

    return
    preg_replace($patterns, $replacements, $str);
    }
    ?>
    Ma salta fuori un'alert con scritto 1, quindi la funzione non va
    Ultima modifica di gabryhacker : 16-09-2008 alle ore 17.09.31

  4. #4
    Guest

    Predefinito

    Ho risolto. Problema di espressioni regolari:
    Codice PHP:
    <?php
    function noxss($str) {
    $patterns[0] = "/<script>/";
    $patterns[1] = "/<\/script>/";
    $patterns[2] = "/<\?php/";
    $patterns[3] = "/<\?/";
    $patterns[4] = "/\?>/";

    $replacements[0] = "&lt;script&gt;";
    $replacements[1] = "&lt;/script&gt;";
    $replacements[2] = "&lt?php";
    $replacements[3] = "&lt;?";
    $replacements[4] = "?&gt;";

    return
    preg_replace($patterns, $replacements, $str);
    }
    ?>

  5. #5
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Citazione Originalmente inviato da gabryhacker Visualizza messaggio
    Ho risolto. Problema di espressioni regolari:
    L'errore era ovvio. Se vuoi usare le espressioni regolari conviene che te le studi per bene, altrimenti perdi solo un sacco di tempo.

    Inoltre nel caso che hai postato l'uso della preg_replace è inutile perché vai a sostituire dei testi fissi. Conviene usare la str_replace che è più rapida per questi casi.

    Infine osserva questi due pattern:

    Codice:
    $patterns[3] = "/<\?/"; 
    $patterns[4] = "/<\?php/";
    Il primo elimina tutti i possibili match della seconda e quindi, in questo caso, la seconda è inutile.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •