Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376

    inviare session_id() via form

    ciao
    per evitare xss scripting (cioè che da un server terzo si possa interagire con una pagina) ho pensato di far inviare (tramite campo hidden) all'utente che compila il form anche il session_id() che ha ricevuto quando ha avuto accesso all'applicazione.
    Però, per evitare di tenerlo in chiaro (l'html è comunque visibile) pensavo di criptarlo con md5 o qualcosa del genre.
    Può andar bene come approccio basilare? tra l'altro, ho visto proprio una guida qui su html.it che suggeriva proprio questo

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Per proteggerti dagli xss non hai bisogno di fare nulla di così complicato.
    Devi invece filtrare ogni input proveniente dall'utente e fare in modo che venga scartato se non è corretto.
    Questo oltre a proteggerti dagli xss previene anche gli attacchi di tipo sql injection, oltre a garantirti una certa solidità dei dati che ricevi.

    Ovviamente il tipo di filtraggio/validazione è strettamente legato al tipo di dato che devi ricevere in input, quindi non so darti informazioni più specifiche a riguardo.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    io già filtro i dati contro sql iniection e xss. Mi riferivo a Cross-Site Request Forgery (CSRF): cioè fare in modo che un form possa essere inviato solo dal sito che l'utente sta usando e in cui ha fatto login. E non da un sito terzo malevolo che invia richieste http-post.
    Complicato non mi pare.... alla fine devo solo fare un campo hidden con valore il session_id()

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Ahh ok, avevi scritto xss e non avevo capito.

    Allora tu devi generare un token, salvarlo come variabile di sessione e inviarlo nel form dentro un hidden field.

    Per generare un token (con php 7+) quando apri la sessione puoi fare così:

    codice:
    session_start();
    if (empty($_SESSION['token'])) {
        $_SESSION['token'] = bin2hex(random_bytes(32));
    }
    $token = $_SESSION['token'];
    Questo token poi lo metti dentro un hidden field con nome "token" nel tuo form, così da inviarlo insieme agli altri dati.

    Poi nella pagina dove leggi i dati POST inviati dal form verifichi che il token sia corretto:

    codice:
    if (!empty($_POST['token'])) {
        if (hash_equals($_SESSION['token'], $_POST['token'])) {
             // Qui processi i dati del form
        } else {
             // Qui logghi i casi in cui i due token sono diversi
    }
    Ovviamente se il token non è presente il form non viene processato.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    è questo l'approccio.
    Però poichè non ho php7 e ho già un valore disponibile e cioè il session_id() pensavo di mettere l'hash del session_id() nel campo hidden e non un altra stringa random generata all'uopo. È la stessa cosa?

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Se vuoi puoi generare il token in php 5 con questo comando:

    codice:
    $token = bin2hex(openssl_random_pseudo_bytes(64));
    Però puoi anche usare il tuo session_id, passandolo ad una funzione di hashing.
    Di solito si usa un token perché avrà un valore meno predicibile e per evitare che il session_id possa venir letto e possa essere "rubata" la sessione, ma passando il tuo id ad una funzione di hashing dovresti essere piuttosto sicuro ugualmente.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    376
    ma come la leggi (in chiaro) una stringa di 26 caratteri (session_id) dal suo hash? credo sia impossibile anche utilizzando le tabelle di hash non potrai mai ricostruire una stringa già di suo molto lunga e random

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Si si ma infatti ti ho detto che va benissimo usare il session_id hashato. Usare un token è in generale quello che leggi in giro sulle best prectices, e visto che non è una gran fatica molto spesso viene usato. Ma a livello di sicurezza i vantaggi sono minimi.

  9. #9
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    ...
    Questo token poi lo metti dentro un hidden field con nome "token" nel tuo form, così da inviarlo insieme agli altri dati.
    ..
    forse dico una sciocchezza, ma nel momento in cui metto il token in input hidden, dal sorgente è comunque leggibile.. a quel punto che senso avrebbe ?!
    aquatimer2000

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Si certo è leggibile, ma qui il punto è proteggersi da un invio proveniente da un form esterno al nostro sito verso una pagina del nostro sito.

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.