Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

Discussione: info su htmlentities()

  1. #1
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316

    info su htmlentities()

    ciao, sto usando htmlentities per proteggere i dati che verranno poi inseriti nel db..però chiaramente in questo modo le lettere e gli accenti vengono trasformati in codice html e nel db una parola accentata diventa illeggibile. c'è un modo per poter sfruttare htmlentities per protezione ma poi comunque visualizzare il valore nel db in lingua "umana"? ho visto html_entity_decode ma non so se sia esattamente quello che mi serve.

    codice:
    $nome = htmlentities(safe($con, $_POST['nome']));
    la funzione safe si occupa di mysql_real_escape_string

    ciao e grazie
    L.

  2. #2
    Utente di HTML.it L'avatar di Vash SD
    Registrato dal
    Sep 2006
    Messaggi
    502
    Ammetto di non averli provati, ma così, su due piedi:

    Da PHP.NET
    Codice PHP:
    <?php
    $orig 
    "I'll \"walk\" the <b>dog</b> now";

    $a htmlentities($orig);

    $b html_entity_decode($a);

    echo 
    $a// I'll &quot;walk&quot; the &lt;b&gt;dog&lt;/b&gt; now

    echo $b// I'll "walk" the <b>dog</b> now

    ?>
    Personal Home Page

  3. #3
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    c'è un modo per poter sfruttare htmlentities per protezione
    Protezione? Le due funzioni che usi per "proteggere i dati che verranno inseriti nel db" si usano in due contesti ben diversi. L'escape della tua stringa viene fatto con mysql_real_escape_string. htmlentities() non aggiunge nessun "livello di sicurezza" ulteriore, anzi, per dirla tutta, lo vanifica.

  4. #4
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    Quote Originariamente inviata da .Kurt Visualizza il messaggio
    Protezione? Le due funzioni che usi per "proteggere i dati che verranno inseriti nel db" si usano in due contesti ben diversi. L'escape della tua stringa viene fatto con mysql_real_escape_string. htmlentities() non aggiunge nessun "livello di sicurezza" ulteriore, anzi, per dirla tutta, lo vanifica.
    ok grazie..ho letto qualche decina di articoli su come usare htmlentities e in metà di questi si dice di usarlo negli input per evitare che qualcuno inserisca uno script in un campo di testo di una form, nell'altra metà invece si dice di usarlo sui dati estratti dal db (ma non ne capisco il senso). Sapresti gentilmente spiegarmi meglio la faccenda?
    grazie
    L.

  5. #5
    Utente di HTML.it L'avatar di .Kurt
    Registrato dal
    Jul 2007
    Messaggi
    654
    Sapresti gentilmente spiegarmi meglio la faccenda?
    Sicuro, vediamo di chiarire il dubbio. Quando devo usare htmlentities? Solamente quando devo stampare a video una stringa. Ogni altro utilizzo è abusivo. Esempio:
    codice:
    $data = ...;
    echo "Il contenuto della variabile data è:" . htmlentities($data);
    $data è comunemente l'input che il tuo utente invia alla pagina. (_GET,_POST o _COOKIE che sia). Ma nulla vieta che la stringa arrivi da un database dopo averlo interrogato. O anche dalla lettura di un file, utilizzando file_get_contents(). Insomma, $data è la tua stringa di cui non conosci il contenuto e che vuoi stampare a video. Usiamo htmlentities (o ancora meglio, htmlspecialchars()) perché non ci fidiamo del suo contenuto. E se contenesse uno script javascript? O dei tag html per modificare la struttura della pagina su cui stampo quei dati? Voglio prevenire questa situazione e lo faccio con quella funzione.
    Ma non è solo perché non mi fido della provenienza di quei dati che uso quella funzione. Perché la userei anche se $data sia un contenuto scritto solo da me. Perché? Perché se il contenuto fosse qualcosa del tipo: "Ciao a tutti da parte di <BlaBla>. A domani." allora <BlaBla> verrebbe riconosciuto come un tag html, e come tale interpretato. Anche se non era nelle mie intenzioni: io volevo solo scrivere qualcosa tra "<" e ">". Dandolo in pasto a htmlentities o htmlspecialchars allora quei caratteri vengono sostituiti con le relative entità, salvandomi da questa situazione.

    Cosa fa htmlspecialchars? Dalla documentazione:
    Alcuni caratteri hanno significati particolari in HTML, e, per questo, devono essere rappresentati tramite entità HTML, se devono mantenere il proprio significato. Questa funzione restituisce restituisce una stringa con la conversione di alcuni di questi caratteri; la conversione svolta non è sempre valida nell'ambito della programmazione web.
    Questa funzione è utile nel prevenire la presenza di marcatori HTML negli input utente, tipo nei forum o nei guest book.
    Ultima modifica di .Kurt; 05-12-2014 a 03:10

  6. #6
    Aggiungo, sottolineo e rimarco: è opportuno che nel database i dati siano PULITI.

    E' al momento dell'output che bisogna filtrarli in modo adeguato, e non al momento del salvataggio.

  7. #7
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    .kurt, spiegazione impeccabile

    ok ho capito e vi ringrazio..però..io faccio tutta una serie di controlli (filtri ecc) sui dati che vengono inseriti nel database..mi aspetterei che i dati che effettivamente riescono ad essere inseriti nel db siano già puliti (tipo che non siano script)..e una volta che sono nel db è difficile modificarli..cioè che senso avrebbe, come dice chumkiu
    E' al momento dell'output che bisogna filtrarli in modo adeguato, e non al momento del salvataggio.
    ? vuol dire che metto nel db praticamente qualsiasi cosa e solo quando li estraggo li filtro?
    ciao,
    L.

  8. #8
    Quote Originariamente inviata da leaf Visualizza il messaggio
    ? vuol dire che metto nel db praticamente qualsiasi cosa e solo quando li estraggo li filtro?
    ciao,
    L.
    Si.
    Per X motivi:

    - oggi i dati ti servono per il web e magari credi possa avere senso encodarli in entità html. Ma se domani li esporti e li metti su un altro supporto non web che non capisce le entità html?
    - Se per un periodo limitato, vi è un errore nel codice per cui non li encodi al salvataggio o lo fai in modo parziale o ti accorgi dopo un anno che i flags che usi non sono sufficienti, avrai filtri promiscui. Come fai a sistemare?
    - motivo logico: un database è un posto dove metti i dati. I dati sono quelli che vuoi mettere non quelli che vorresti vedere sul browser. Se metti <bla>, il tuo dato è <bla> e non &lt;bla&rt;. Una "è" è una "è" e non un "&egrave;". Quest'ultima è una rappresentazione del dato, non il dato stesso.
    - motivo pratico: devi stare a ricordarti di decodificarli quando ti servono decodificati, e reincodarli al salvataggio. E' una cosa più propensa agli errori rispetto al fatto di ricordarti "solo" di filtrarli quando fai un echo (cosa che puoi quasi automatizzare in certi contesti e alcuni template engine fanno in automatico)

  9. #9
    Utente di HTML.it L'avatar di leaf
    Registrato dal
    Oct 2012
    Messaggi
    316
    capisco ma non sono convinto..intanto grazie!

  10. #10
    Quote Originariamente inviata da leaf Visualizza il messaggio
    capisco ma non sono convinto..intanto grazie!
    Vai tranquillo. E' necessario sbattere la testa a volte per capire determinate cose.

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.