Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777

    [PHP/MYSQL] sicurezza php dei dati

    allora ho letto e riletto varie guide e devo dire che sono un pochino confuso.
    ho già chiesto come bisogna filtrare la variabile numerica e ho ottenuto qui risposte a mio modo soddisfacienti.
    parliamo di stringhe cioè di lettere e numeri.
    tutte le ricerche che ho fatto mi hanno portato qui
    Esempio

    if(isset($nome)){
    $nome= trim(addslashes(htmlentities($nome)))
    }
    poi girando ho letto di questa funzione Strip_Tags()

    questi controlli devono essere fatti sempre o per quelle variabili immesse dall'utente? quindi get e post, session e cookie?
    Esempio: motore di ricerca
    se invece sono il richiamo semplice a campi di una tabella mysql devono essere fatti? scusate il dubbio stupido...
    io devo effettuare i controlli sia che la destinazione sia una pagina di commenti o una mail mandata a e me?
    ho anche messo il codice captcha.
    se ci sono lacune chiedo scuse ma sto appena agli inizi della comprensione dell'argomento sicurezza e se pongo queste domande e per essere un pò guidato.

  2. #2
    Utente di HTML.it L'avatar di oronze
    Registrato dal
    Jun 2001
    Messaggi
    3,543
    http://php.net/manual/en/function.my...ape-string.php

    dovresti usarlo su tutto ciò che viene immesso dall'utente in una query al database. Se il nome della tabella lo imposti tu dal codice non serve utilizzare quella funzione

    il codice captcha non è una protezione dagli attacchi sql ma dall'automatizzazione dell'invio di un form

    No ai layout tabellari!

    Insulto libero: http://forum.html.it/forum/showthread.php?s=&postid=12524872#post12524872

  3. #3
    ecludendo l'utilizzo del PDO...

    il filtro fatto con trim(addslashes(htmlentities($nome))) non è corretto.

    - SE DEVI INSERIRE UNA STRINGA IN UN CAMPO VARCHAIR/TEXT DEL DB
    è necessario verificare che get_magic_quotes sia impostata su OFF (in caso contrario eseguite lo stripslashes) ed eseguire mysql_real_escape_string()
    Codice PHP:
    <?php
    function EscapeString($string)
    {
        if(
    get_magic_quotes_gpc())
        {
            
    $string stripslashes($string);
                    return 
    mysql_real_escape_string($string);
        }
        else
        {
            return 
    mysql_real_escape_string($string);
        }
    }
    ?>
    Fonte: http://www.mtxweb.ch/php_learn/?p=864

    - PROBLEMI CON LO CHARSET
    vi deve essere una coerenza fra charset della pagina (impostata con metatag) e del db
    pertanto in fase di estrazione dovrai unicamente utilizzare sripslashes per rimuovere gli slash inseriti in fase di INSERT

    - ULTERIORI FILTRI
    in fase di stampa a video potresti voler "immunizzare" il codice presente nel db.

    Ad esempio se nel db hai salvato dell'HTML che vuoi venga stampato a video ed interpretato non dovrai fare nulla (ad esempio un post di un blog salvato nel db e formattato in HTML).

    Se al contrario vuoi che l'HTML non sia intepretato ma semplicemente stampato a video (come accade con i post in questo forum) utilizzerai htmlspecialchars()
    che trasforma < > & " ' nelle relative entità HTML quindi il codice (HTML / JS/ ETC ETC) verrà visualizzato e non intepretato.

    Se invece vuoi rimuovere del tutto i tags utilizzerai striptags()... ma, ad esempio, in un forum come questo sarebbe paradossale eliminare del tutti i tag postati dagli utenti che si troverebbero impossibilitati a postare codice...

    htmlentities() è una funzione più "complessa" e serve per convertire tutti i caratteri nell'entità HTML a secondo dello charset indicato. Questa è utilizzata quando vi è una discrepanza fra lo charset della pagina e quello del db (ad esempio quando si ha a che fare con arabo, cinese, etc etc).

    -------------

    Come puoi capire conoscendo le funzioni e il loro scopo devi applicare quelle opportune e non fare un'accozzaglia generale.
    Tieni presente che quello che ti ho detto è una sintesi molto succinta...
    http://www.miniscript.it
    Se ti sono stato di aiuto in qualche modo in questo forum iscriviti alla fan page di Miniscript - il mio blog di programmazione web.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    Originariamente inviato da oronze
    http://php.net/manual/en/function.my...ape-string.php

    dovresti usarlo su tutto ciò che viene immesso dall'utente in una query al database. Se il nome della tabella lo imposti tu dal codice non serve utilizzare quella funzione

    il codice captcha non è una protezione dagli attacchi sql ma dall'automatizzazione dell'invio di un form
    capisco mi leggo l'articolo che mi hai linkato poi magari ripasso

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    777
    Originariamente inviato da oly1982
    ecludendo l'utilizzo del PDO...

    il filtro fatto con trim(addslashes(htmlentities($nome))) non è corretto.

    - SE DEVI INSERIRE UNA STRINGA IN UN CAMPO VARCHAIR/TEXT DEL DB
    è necessario verificare che get_magic_quotes sia impostata su OFF (in caso contrario eseguite lo stripslashes) ed eseguire mysql_real_escape_string()
    Codice PHP:
    <?php
    function EscapeString($string)
    {
        if(
    get_magic_quotes_gpc())
        {
            
    $string stripslashes($string);
                    return 
    mysql_real_escape_string($string);
        }
        else
        {
            return 
    mysql_real_escape_string($string);
        }
    }
    ?>
    Fonte: http://www.mtxweb.ch/php_learn/?p=864

    - PROBLEMI CON LO CHARSET
    vi deve essere una coerenza fra charset della pagina (impostata con metatag) e del db
    pertanto in fase di estrazione dovrai unicamente utilizzare sripslashes per rimuovere gli slash inseriti in fase di INSERT

    - ULTERIORI FILTRI
    in fase di stampa a video potresti voler "immunizzare" il codice presente nel db.

    Ad esempio se nel db hai salvato dell'HTML che vuoi venga stampato a video ed interpretato non dovrai fare nulla (ad esempio un post di un blog salvato nel db e formattato in HTML).

    Se al contrario vuoi che l'HTML non sia intepretato ma semplicemente stampato a video (come accade con i post in questo forum) utilizzerai htmlspecialchars()
    che trasforma < > & " ' nelle relative entità HTML quindi il codice (HTML / JS/ ETC ETC) verrà visualizzato e non intepretato.

    Se invece vuoi rimuovere del tutto i tags utilizzerai striptags()... ma, ad esempio, in un forum come questo sarebbe paradossale eliminare del tutti i tag postati dagli utenti che si troverebbero impossibilitati a postare codice...

    htmlentities() è una funzione più "complessa" e serve per convertire tutti i caratteri nell'entità HTML a secondo dello charset indicato. Questa è utilizzata quando vi è una discrepanza fra lo charset della pagina e quello del db (ad esempio quando si ha a che fare con arabo, cinese, etc etc).

    -------------

    Come puoi capire conoscendo le funzioni e il loro scopo devi applicare quelle opportune e non fare un'accozzaglia generale.
    Tieni presente che quello che ti ho detto è una sintesi molto succinta...
    scusami sono nuovo sull'aspetto sicurezza per cui meglio sbagliare adesso
    comunque il magic non è attivo sono sicuro perchè ho fatto la prova.
    se non ho capito male
    quando mando l'utente manda nel db
    devo filtrare con addslashes
    quindi un testo del tipo "quell'amica" nel db sarebbe "quell\'amica" giusto? poi per stampare a video devo fare stripslashes() per eliminare \
    domanda: magic real cosa fa di preciso non ho capito...

    quando un utente manda nel motore di ricerca
    in questo caso l'utente interroga un WHERE DELLA QUERY..qui occorre addslashes ma non c'è bisogno di strip?

    ultima cosa
    e se i post sono destinati ad una mail? vale lo stesso discorso?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.