• Consiglio Direttivo

    Non sono un esperto di sicurezza, ma ovunque tu vada a leggere non è mai consigliabile permettere di far maneggiare tags HTML a script e Database, soprattutto se chiunque può inserirli. Utilizzando il sistema BBcode, che viene sfruttato come puoi vedere anche su questo forum, fai maneggiare dell'innocuo testo ai tuoi script. [B ] e [/ B], per gli script e per il Db son solo testo, all'atto della visualizzazione, e solo allora, li rimpiazzerai con quanto ti serve per una corretta visualizzazione HTML. :).
    L'utilizzo di tags HTML potrebbe sfociare in buchi non irrilevanti, a discapito della sicurezza del tuo sistema. 🙂


  • ModSenior

    Ciao max0005,

    Per quanto riguarda la chiusura guarda qui (L'esempio usa BBCODE).
    Per quanto riguarda i bbcode oppure i tag html, direi che l'unica differenza rilevante sta nella facilità di controllo e per inserire nuovi bbcode (Sistema molto usato nei browsergame dove troviamo altri bbcode come ad esempio [player],[village],ecc).
    I tag html devono per l'appunto essere filtrati, per evitare di mettere ad esempio redirect javascript.


  • Consiglio Direttivo

    M'ero perso l'UPDATE, max. 😄

    Grazie infinite Thedarkita, ottima risorsa, spostata in area idonea. 😉


  • Super User

    Ho provato a usare uno script simile a quello che tu mi hai indicato (nel senso che ho solo modificato/aggiunto tag :D) ma mi da questo errore:

    Parse error: parse error in C:\xampp\htdocs\nfs\sendpm.php on line **44

    **[php]
    $pre_message = mysql_real_escape_string($_REQUEST["message"]);

    function bbcode_format($var) {
    $search = array(
    ?/(.*?)/is?, //<-- riga 44
    ?/(.?)/is?,
    ?/
    (.?)/is?,
    ?//is?,
    ?/(.?)/is?,
    ?/(.
    ?)/is?
    );
    $replace = array(
    ?<strong>$1</strong>?,
    ?<em>$1</em>?,
    ?<u>$1</u>?,
    ?<img src="$1" />?,
    ?<a href="$1">$1</a>?,
    ?<a href="$1">$2</a>?
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }

    $message = str_replace('\n', '', var);
    [/php]


  • Consiglio Direttivo

    La funzione per i bbcode andrà utilizzata in visualizzazione, mi sembra di capire che tu l'abbia messa nel file che invia i dati al Db invece.
    Ti conviene mettere la funzione in un file a parte e includerlo tramite require_once.

    Quando estrai i dati per visualizzarli farai semplicemente questo:
    [php]$message=bbcode_format($message);[/php]A questo punto puoi anche inserire la variazione da \n a <br /> direttamente in quella funzione:
    [php]function bbcode_format($var) {
    $search = array(
    '/(.*?)/is', //<-- riga 44
    '/(.?)/is',
    '/
    (.?)/is',
    '//is',
    '/(.*?)/is',
    '\n'
    );
    $replace = array(
    '<strong>$1</strong>',
    '<em>$1</em>',
    '<u>$1</u>',
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    } [/php]Credo che così dovrebbe andare. 😉

    P.S. ti ho tolto una delle modifiche dato che le hai rese identiche e quindi inutile duplicarle. 😉


  • Super User

    Ciao,
    visto che sto usando il codice nel filme che mette i dati nel mysql ho invertito le due parti:

    [php]
    $to = mysql_real_escape_string(strip_tags($_REQUEST["to"]));
    $subject = mysql_real_escape_string(strip_tags($_REQUEST["subject"]));
    $pre_message = mysql_real_escape_string($_REQUEST["message"]);

    function bbcode_format($var) {
    $search = array(
    '<strong>$1</strong>',
    '<em>$1</em>',
    '<u>$1</u>',
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />'
    );
    $replace = array(
    '/(.*?)/is', //<-- riga 44
    '/(.?)/is',
    '/
    (.?)/is',
    '//is',
    '/(.*?)/is',
    '\n'
    );
    $var = preg_replace ($search, $replace, $var); //<-- riga 59
    return $var;
    }

    $message_a = str_replace('\n', '', $pre_message);
    $message_b=bbcode_format($message_a);
    $message = strip_tags($message_b);
    [/php]

    però mi da

    Warning: preg_replace() [function.preg-replace]: Unknown modifier '$' in C:\xampp\htdocs\nfs\sendpm.php on line 59


  • ModSenior

    Devi invertire pure $1 con (.*?).
    Però che senso ha convertire l'html in bbcode? Dovresti convertirlo nuovamente per utilizzarli...


  • Super User

    Ora che mi ci fai pensare... hai ragione... per qualche ragione ho pensato di far inserire tag html, convertirli in bbcode e poi convertire il bbcode in html... fare php per lunghi periodi fa MALE 😮

    UPDATE: il mio codice in un file esterno richiamato poi con require_once:

    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    '',
    '',
    '
    ',
    '',
    '',
    '\n',
    '[:)]',
    '[O:)]',
    '[:@]',
    '[:S]',
    '[:
    (]',
    '[£:)]',
    '[:$]',
    '[:O]',
    '[:(]',
    '[8)]',
    '[:D]',
    '[:P]',
    '
    ',
    '[;)]'
    );
    $replace = array(
    '<strong>(.
    ?)</strong>',
    '<em>(.
    ?)</em>',
    '<u>(.?)</u>',
    '<img src="(.
    ?)" />',
    '<a href="(.*?)">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }

    ?>
    [/php]

    L'errore:
    Warning: preg_replace() [function.preg-replace]: Unknown modifier '[' in C:\xampp\htdocs\nfs\bbc.php on line **48

    :arrabbiato:
    **


  • ModSenior

    Prova cosi:
    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    '/[b](.?)[/b]/is',
    '/[i](.
    ?)[/i]/is',
    '/[u](.?)[/u]/is',
    '/[img](.
    ?)[/img]/is',
    '/[url](.?)[/url]/is',
    '',
    '\n',
    '[:)]',
    '[O:)]',
    '[:@]',
    '[:S]',
    '[:
    (]',
    '[£:)]',
    '[:$]',
    '[:O]',
    '[:(]',
    '[8)]',
    '[:D]',
    '[:P]',
    '',
    '[;)]'
    );
    $replace = array(
    '<strong>(.
    ?)</strong>',
    '<em>(.?)</em>',
    '<u>(.
    ?)</u>',
    '<img src="(.?)" />',
    '<a href="(.
    ?)">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace ($search, $replace, $var);
    return $var;
    }

    ?>
    [/php]


  • ModSenior

    Ho provato io e da errore, la soluzione definitiva dovrebbe essere questa:
    [php]
    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.?)[/url]/is",
    '/\n/',
    '/[:)]/',
    '/[O:)]/',
    '/[:@]/',
    '/[:S]/',
    '/[:
    (]/',
    '/[£:)]/',
    '/[:$]/',
    '/[:O]/',
    '/[:(]/',
    '/[8)]/',
    '/[:D]/',
    '/[:P]/',
    '/*/',
    '/[;)]/'
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">',
    '<img src="img/smile/smile11.gif">',
    '<img src="img/smile/smile12.gif">',
    '<img src="img/smile/smile13.gif">',
    '<img src="img/smile/smile14.gif">'
    );
    $var = preg_replace($search, $replace, $var);
    return $var;
    }
    [/php]


  • Super User

    Grazie thedarkita 😄

    la parte relativa alla formattazzione del testo funziona. Però ho dei problemi con gli smilies 😞 Ad esempio basta che io nel testo inserisca una 'S', che lo interpreta come [:S] e lo traduca nella corrispondente immagine.

    Ad esempio mettendo [:D]

    Il risultato è l'equivalente di:

    [:):D]

    Possibili soluzioni? :mmm:
    max

    PS: Credo (basato esclusivamente su un'opinione personale) che allo script basti UN elemento in comune (eg: in [:S] basta che trovi una 'S' perchè converta l'immagine). Cosa ne pensi?


  • ModSenior

    A via di mettere / e \ sto impazzendo. 😄
    Un paio li ho sistemati, gli altri sto impazzendo... Fai prima a fare un str_replace per le faccine invece che fare le espressioni regolari inutilmente secondo me.

    [php]
    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.?)[/url]/is",
    '/\n/',
    "/[:)]/",
    "/[\O:)]/",
    "/[:@]/",
    "/[:S]/",
    "/[:
    ]/",
    "/[\£:)]/",
    "/[:$]/",
    "/[:O]/",
    "/[;)]/",
    "/[:(]/"
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />',
    '<img src="img/smile/smile1.gif">',
    '<img src="img/smile/smile2.gif">',
    '<img src="img/smile/smile3.gif">',
    '<img src="img/smile/smile4.gif">',
    '<img src="img/smile/smile5.gif">',
    '<img src="img/smile/smile6.gif">',
    '<img src="img/smile/smile7.gif">',
    '<img src="img/smile/smile8.gif">',
    '<img src="img/smile/smile9.gif">',
    '<img src="img/smile/smile10.gif">'
    );
    $var = preg_replace($search, $replace, $var);
    return $var;
    }
    [/php]


  • Super User

    Grazie mille 😄


  • ModSenior

    Vedi che mancano 4 faccine però...
    Perchè una non sono riuscito a farla andare.
    Ti consiglio comunque di fare un str_replace per le faccine, che sicuramente è molto più comodo.


  • Super User

    Si ho usato uno str_replace e funziona 😄

    Ho ancora un dubbio... in pratica avrei bisogno che continuasse la ricerca di bbcode da rimpiazzare anche all'interno degli stessi... esempio:

    
    [table] [table] [/table] [/table]
    
    ```dove il codice '[table]' è (per esempio):
    
    

    <table border="1">
    <tr>
    <td>

    </td>
    </tr>
    </table>

    
    

    <table border="1">
    <tr>
    <td>
    [table][/table]
    </td>
    </tr>
    </table>
    [/table]

    
    mentre io vorrei che fosse
    
    

    <table border="1">
    <tr>
    <td>

    <table border="1">
    <tr>
    <td>
    </td>
    </tr>
    </table>

    </td>
    </tr>
    </table>


  • ModSenior

    Il problema è che considera sempre la prima apertura e la prima chiusura che trova...
    Non mi viene niente in mente... :mmm:


  • Super User

    Il codice in questione:

    [php]
    "/[premsg](.*?)[/premsg]/is"
    [/php][php]
    '<table border="1" STYLE="border-style:none; font-size:12px" width="700"><tr bgcolor="FFCC99"><td>$1</td></tr></table>'
    [/php]eppure ci sono numerosi forum e cms che fanno uso di questo sistema di "tabella in tabella" per segnalare (ad esempio) quote di quote... mmh... :mmm:

    PS:

    Esempio di codice risultante da uso di [premsg] testo [premsg] altro testo[/premsg][/premsg]:

    
    <br /><table border="1" STYLE="border-style:none; font-size:12px" width="700"><tr bgcolor="FFCC99"><td>
    <br />____________________
    <br />max0005 wrote:
    <br />
    <br />sdfdddssd
    <br />
    <br />[premsg]
    <br />____________________
    <br />max0005 wrote:
    <br />
    <br />gaaamesgaaames</td></tr></table>[/premsg]
    
    

  • ModSenior

    Cosi dovrebbe andare:
    [php]
    <?php

    function bbcode_format($var) {
    $search = array(
    "/[b](.?)[/b]/is",
    "/[i](.
    ?)[/i]/is",
    "/[u](.?)[/u]/is",
    "/[img](.
    ?)[/img]/is",
    "/[url](.*?)[/url]/is",
    '/\n/'
    );
    $replace = array(
    '<strong>$1</strong>',
    "<em>$1</em>",
    "<u>$1</u>",
    '<img src="$1" />',
    '<a href="$1">$1</a>',
    '<br />'
    );

     while(preg_match("#[table](.*?)[\/table]#is", $var)!=0)
         $var = preg_replace("#[table](.*?)[\/table]#is", '<table>$1</table>', $var);
     $var = preg_replace($search, $replace, $var);
     return $var;
    

    }
    ?>
    [/php]


  • Super User

    Funziona!!! 😄

    Non so davvero come ringraziarti ci avrei passato la notte! :yuppi:


  • ModSenior

    😉