Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683

    alcune domande sulla sicurezza php

    ciao a tutti!!
    ho appena finito di leggere: Guida sicurezza di php.
    ho alcune domande:
    1) una conferma, per evitare che un cracker si impossessi di username e password tramite sessioni devo cambiare spesso l'id del file sessione con: session_regenerate_id() giusto? spacciarsi per qualcun altro.
    2) per far si che il cracker non faccia il download di file protetti, si deve mettere un file .htaccess contenente:
    codice:
    <Files ~ ".+">
    Order allow,deny
    Deny from all
    Satisfy All
    </Files>
    ma poi anche gli utenti registrati non potranno accedere ai file, come posso ovviare al problema? evitare il download diretto dei file dati.
    3) l'ultima cosa, ho visto che c'è pericolo di attacco pure nelle immagini, ma non ho capito come difendermi, mi sapete aiutare?? cross site request forgeries.
    grazie.

  2. #2
    1) un "cracker" non puo' impossessarsi di username e password tramite le sessioni, ma puo' rubare un valido SESSION ID o forzare un utente legittimo ad usarne uno di sua scelta per poi avere accesso ad un'applicazione una volta che questo utente si e' loggato: per evitare questo e' buona norma rigenerare il session id ogni volta che c'e' un cambiamento nel livello di privilegio di un utente (ad esempio quando un utente si logga)

    2) se hai dei file che devono essere protetti e non accessibili da tutti, allora devi per forza rifiutare tutte le richieste dirette e consentire il download solo tramite un tuo script che provvedera' a servire solo gli utenti autorizzati

    3) da utente non puoi fare nulla per proteggerti, da sviluppatore di una web application puoi seguire alcune linee guida:
    • non usare mai l'array $_REQUEST
    • non usare mai valori presi tramite $_GET per compiere delle azioni
    • come conseguenza del punto precedente, ogni pagina che "agisce" in maniera potenzialmente pericolosa, deve essere raggiunta tramite POST e deve avere un valido token che avrai preventivamente creato per poi verificarlo (vedi secondo link sotto)

    Posto come riferimento 2 link al blog di Chris Shiflett (autore di un ottimo e molto chiaro libro sulla sicurezza PHP):
    http://shiflett.org/articles/session-fixation
    http://shiflett.org/articles/cross-s...uest-forgeries

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    Originariamente inviato da k.b
    2) se hai dei file che devono essere protetti e non accessibili da tutti, allora devi per forza rifiutare tutte le richieste dirette e consentire il download solo tramite un tuo script che provvedera' a servire solo gli utenti autorizzati
    io a livello di php posso anche proteggere un file dal download, però se uno scrive ad esempio http://nome-sito.com/file-protetto.zip riuscirebbe comunque a scaricarlo? o no? come posso evitare questo?
    Originariamente inviato da k.b
    • non usare mai valori presi tramite $_GET per compiere delle azioni
    ma i $_GET son abbastanza indispensabili, no?? dove posso uso le $_SESSION ma a volte non si può fare a meno di usare le $_GET se le controllo, filtro i dati e li forzo eventualmente rischio ancora attacchi??
    Originariamente inviato da k.b
    • come conseguenza del punto precedente, ogni pagina che "agisce" in maniera potenzialmente pericolosa, deve essere raggiunta tramite POST e deve avere un valido token che avrai preventivamente creato per poi verificarlo (vedi secondo link sotto)
    cos'è il token?? non lo conosco... ti rigrazio per la risposta e per i link... però il mio inglese è parecchio grezzo... lo so che mi è vincolante, ma è dalle elementari che non riesco a ficcarmelo in testa

  4. #4
    L'argomento sicurezza e' decisamente molto vasto ed e' difficile riassumere tutto il necessario in un post su un forum. Alcuni punti in risposta al tuo messaggio comunque:
    • non proteggi i file con PHP, li proteggi con le direttive al webserver (file .htaccess se usi apache) in modo da impedire il download diretto e poi gestisci i download con PHP
    • non ho detto di non usare $_GET, ma di non usarlo per compiere azioni -- le specifice HTTP stesse prevedono che GET si usi per ricevere dati, non per dire ad una pagina di compiere azioni: se devi confermare un ordine usa un form con POST invece di una url con il parametro "conferma"
    • un token e' semplicemente un codice "usa e getta": il sistema suggerito prevede che quando crei - ad esempio - un form inserisci tra i vari campi anche questo token in modo che lo script che riceve i dati possa verificare che la richiesta venga proprio dalla pagina precedente (il tuo form) e non da qualche richiesta "contraffatta"

    Purtroppo non conosco molte risorse a riguardo in italiano, per trovarle dovrei usare google ma a questo punto puoi farlo anche tu

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    ok.. grazie mille.. mi hai dato delle dritte.. le approfondirò

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    solo per quanto riguarda i token mi sapresti rimandare ad un articolo online o una breve spiegazione su come fare? grazie

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    539
    in genere io mi creo un token con una stringa data dal timestamp magari con md5 tanto per condire un pò; poi associo il token ad una sessione e ogni volta che invio navigo tra le pagine invio il token con il get e confronto il get con una sessione o un cookie; se la stringa è la stessa allora sto navigando nella stessa sessione; altrimenti butto fuori l'utente...

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    però io ero interessato proprio a livello di codice a fare un token... su questo punto non saprei nemmeno da dove cominciare, se conoscete una guida che spiega come fare...

  9. #9
    Esempio preso dall'articolo che ti ho linkato sopra:

    nella pagina che contiene il form, crei il token con un codice casuale, lo inserisci nel form come campo hidden e in sessione:

    Codice PHP:
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();

    ?>
    <form action="buy.php" method="post">
    <input type="hidden" name="token" value="<?php echo $token?>">



    Symbol: <input type="text" name="symbol">

    Shares: <input type="text" name="shares">

    <input type="submit" value="Buy">
    </p>
    </form>
    e poi nella pagina che riceve i dati, verifichi che quello inviato sia uguale a quello in sessione (cioe' i dati provengono proprio dal tuo form e non da un'altra richiesta che parte chissa' da dove:

    Codice PHP:
    if ($_POST['token'] == $_SESSION['token'])
    {
    /* Valid Token */


  10. #10
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    1,683
    aaaaaaaaaaaaaa, ho capito!!! grazie mille ancora

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.