• User Attivo

    consigli per rendere sicuri gli script in php

    Buongiorno a tutti,

    sono un principiante di php; come da oggetto vorrei rendere un minimo sicuri i miei script in php.
    Girando sul web, ricapitolerei così le regole da seguire:

    • credenziali di accesso sicure (no password 1234)
    • assicurarsi che non sia possibile vedere il contenuto delle cartelle
    • evitare che gli errori del sito siano visibili
    • password in md5 o sha1
    • login con sessioni o con htpasswd
    • riscrivere gli url con htaccess
    • filtrare l'inserimento sul db dai form con trim, htmlspecialchars, addslashes (di seguito un esempio)

    config.php
    [PHP]
    <?php ob_start() ?>
    <?php $db=mysqli_connect('localhost','root','','fw'); ?>
    [/PHP]

    form.php
    [PHP]
    <?php include 'config.php'; ?>
    <form method="post" action="insert.php">
    <label>Text</label>
    <input name="fw_text" type="text">
    <label>Radio</label>
    <input type="radio" name="fw_radio" value="0">0<br>
    <input type="radio" name="fw_radio" value="1">1<br>
    <label>Date</label> <input name="fw_date" type="text">
    <label>Datetime</label>
    <input name="fw_datetime" type="text">
    <label>Textarea</label>
    <input name="fw_textarea" type="text">
    <input name="fw_submit" type="submit" value="invia">
    </form>
    [/PHP]

    insert.php
    [PHP]
    <?php include 'config.php'; ?>
    <?php
    $fw_text = trim(htmlspecialchars(addslashes($_POST['fw_text'])));
    $fw_radio = trim(htmlspecialchars(addslashes($_POST['fw_radio'])));
    $fw_date = trim(htmlspecialchars(addslashes($_POST['fw_date'])));
    $fw_datetime = trim(htmlspecialchars(addslashes($_POST['fw_datetime'])));
    $fw_textarea = trim(htmlspecialchars(addslashes($_POST['fw_textarea'])));
    $fw_sql = "INSERT INTO fw_table (fw_text,fw_radio,fw_date,fw_datetime,fw_textarea) VALUES ('$fw_text','$fw_radio','$fw_date','$fw_datetime','$fw_textarea')";
    $fw_ret = mysqli_query( $db, $fw_sql );
    header("location:form.php");
    ?>
    [/PHP]

    vorrei sapere se può essere sufficente o se manca qualcosa.

    ringrazio in anticipo per le risposte
    buona giornata e buon lavoro


  • User Attivo

    password in md5 o sha1

    Attualmente, se la tua versione PHP lo permette, blowfish può essere una valida alternativa. Se proprio usi md5 e sha1, fai in modo di metterci dentro uno (o più?) salt.

    addslashes

    Ti converrebbe fare prima il controllo get_magic_quotes_gpc() per evitare una doppia applicazione. Qui trovi un esempio: giorgiotave.it/forum/scripting-e-risorse-utili/83033-tutorial-area-privata.html


  • User Attivo

    Grazie Gigi per la risposta tempestiva!
    Cosa intendi dicendo "mettici dentro uno o più SALT"?
    cosa sono i SALT?

    Ok per il magic quotes poi do un occhio.
    ma secondo te è sufficiente adottare questi accorgimenti o Manca qualcosa?
    non devo fare un sito per una banca, ma volevo avere un minimo di sicurezza ecco...

    grazie mille intanto
    buona giornata


  • User Attivo

    Criptare le password in SHA256 potrebbe essere un altra soluzione 🙂
    MD5 comincia ad essere troppo decifrabile, sopratutto per quelle password semplici che gli utenti spesso inseriscono 😉


  • User Attivo

    Che io sappia così sei tranquillo se non si tratta di banche e simili.

    Sui salt trovi molto in rete, sono comunque pezzi di stringa che aggiungi alla password prima di farne l'encrypt.

    Così, anche nel caso in cui qualcuno riesca ad ottenere i dati del database, non riesce con semplicità ad ottenere le credenziali di tutti gli utenti.

    Se usi solo md5 (), raccolti i dati criptati, il passaggio per bucarli tutti è solo uno: trovare una stringa che col solo passaggio in md5 mi da lo stesso codice.

    Sha1: considera che con cchrome 41 verrà segnalata come non sicuro per il certificato ssl.


  • User Attivo

    In realtà no, non basta. A parte che c'è la funzione mysqli_real_escape_string() che già da sola fa molto, mancano gli accorgimenti per evitare il problema XSS e il buffer overflow.
    Quando ho tempo rispondo più approfonditamente.