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

Discussione: [PHP, sicurezza] CSRF

  1. #1
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940

    [PHP, sicurezza] CSRF

    Una semplice domanda: come difendersi dai CROSS SITE REQUEST FORGERIES?
    10x.

    [.:: JaguarXF ::.]
    __________________

  2. #2
    nello stesso modo in cui ci si difende dalle SQLInjections, si verifica sempre scrupolosamente il valore della stringa in entrata e si effettuano "le solite operazioni" di escape più idonee per questa problematica (htmlentities, htmlspecialchars, addslashes, strip_tags, etc etc)
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Non necessariamente la pagina hackerata deve far parte del programma/sito attaccato: è sufficiente che l’utente, autenticato sul Sito_A (sito attaccato) visiti una pagina malevola sul Sito_B (sito controllato dall’hacker), la quale pagina rediriga al Sito_A con query string ad hoc.

    Ecco: da questo come ci si difende?

    Io (il Sito_A) posso fare tutti gli escaping possibili, ma se lo stesso browser dello stesso utente autenticato, che nel frattempo sta visitando un "sitaccio" mi chiama una pagina PHP con certi parametri (costruiti apposta) in GET, io... che posso fare??

    Richiesta di "ok?" no, perchè bypassarla è un attimo...

    [.:: JaguarXF ::.]
    __________________

  4. #4
    Originariamente inviato da mark2x
    Io (il Sito_A) posso fare tutti gli escaping possibili, ma se lo stesso browser dello stesso utente autenticato, che nel frattempo sta visitando un "sitaccio" mi chiama una pagina PHP con certi parametri (costruiti apposta) in GET, io... che posso fare??
    fortunatamente il browser non conta niente per il server, quindi più che non salvare password in chiaro ed evitare iframes nell'area di admin non so che dirti ... se non effettua il parsing di tutti i dati in ingresso.

    Sito B può scrivere sul browser in sito_A quello che gli pare, il server, grazie a strip_tags, html_entities, specialchars, is_int, is_float, is_string, preg_match e tutto quello che vuoi non deve permettere a nessuno di infastidire il comportamento dell'area proposta.

    Browser maligno ? ... chissenefrega, è il server che deve fare i controlli, mai l'utente (o il solo utente, tipo javascript).

    chi usa javascript deve fare altrettanti controlli sul server, questo da sempre
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Non intendevo proprio questo.... Ma:

    - Io sono autenticato sul Sito_A e sto navigando. Sono amministratore, il mondo è mio, posso fare tutto.
    - Nel mentre, navigo sul Sito_B che, nel tag <img> ha questo: "Sito_A/cancella_tutto.php?id=4"
    - Risultato: solamente nel visualizzare la pagina con tale img sul Sito_B, cancello metà db sul Sito_A, e nemmeno me ne accorgo (vedo solo un'immagine che non si carica).

    [.:: JaguarXF ::.]
    __________________

  6. #6
    credo che questo si possa evitare a livello di struttura del software

    ad esempio io ogni "eliminazione" la faccio passare da una pagia di conferma in cui c'è un form con un campo hidden contente la sessione dell'utente, e il metodo che elimina ovviamente esegue il controllo che la sessione sia corretta.

    Ovviamente ciò non toglie al "sito_b" di farsi un form identico che fa il post (dopo essersi autenticato) sul mio portale, ma a sto punto la sessione dovrebbe essere differente, o sbaglio?
    "durante i primi 5 miuti di pioggia nel bosco c'è ancora asciutto, poi quando smetterà di piovere nel bosco cadranno gocce per 5 minuti.....la natura ha un'ottima memoria..."

    http://www.kumbe.it

  7. #7
    Originariamente inviato da mark2x
    - Nel mentre, navigo sul Sito_B che, nel tag <img> ha questo: "Sito_A/cancella_tutto.php?id=4"
    ah beh ... se per area protetta intendi una pagina dove chiunqe possa scrivere quell'url e cancellarti il db allora abbiamo concetti differenti di aree protette ...



    un'area protetta sta su SSL, dove sito_B non può niente, oppure su sistemi affidabili di autenticazione dove ogni operazione, prima di essre fatta, deve controllare scrupolosamente che a richiamare tale operazione sia stato proprio l'utente Pippo da sito_A.


    Il problema di cui parli è tipico delle aree admin in Flash fatte da utenti poco esperti che pensano che l'SWF non sia leggibile ... si trova il link, si distrugge il db .... niente di più facile
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Lasciando perdere l'SSL, mi dici:

    Originariamente inviato da andr3a
    [...]sistemi affidabili di autenticazione dove ogni operazione, prima di essre fatta, deve controllare scrupolosamente che a richiamare tale operazione sia stato proprio l'utente Pippo da sito_A.
    Un esempio?
    Nel senso che basta un controllo del tipo seguente e sto sicuro?

    ad esempio io ogni "eliminazione" la faccio passare da una pagina di conferma in cui c'è un form con un campo hidden contente la sessione dell'utente, e il metodo che elimina ovviamente esegue il controllo che la sessione sia corretta.
    EDIT: il semplice canonico controllo della sessione non serve a nulla.

    [.:: JaguarXF ::.]
    __________________

  9. #9
    Originariamente inviato da mark2x
    Nel senso che basta un controllo del tipo seguente e sto sicuro?
    io autentico su db e salvo i dati hashati sulla sessione in db, ogni operazione di amministrazione, parte di metodi di una o più classi, è autorizzata ad essere eseguita solo se l'utente ha un riscontro reale degli hash memorizzati sulla sessione in database con la lista degli autorizzati, sempre in database, e solo se i privilegi sono sufficienti.

    sito_B può fare tutto quello che vuole ma non sarà riconosciuto come un utente autenticato mentre se l'utente in sito_B clicka un link che porta alla sua area di amministrazione mentre è loggato lui è un fagiano, io posso comunque tentare di verificare, oltre alla sessione, se il referer è quello predefinito e non quello di un altro sito.

    Per avere un sito_B ad hoc per fare queste cose bisogna che tale sito sappia esattamente come agire nella "mia" area di amministrazione ed invogli in tutti i modi, nascondendo il link, l'utente a clickare li per fare danni sul sito_A senza avere un reale riscontro, essendo pagine differenti, dei danni causati o del risultato dei danni.

    A quel punto un controllo in javascript tipo "sei sicuro che vuoi distruggere tutto ?" prima di effettuare l'operazione potrebbe salvare ulteriormente l'utente.

    Un'insieme di "collisioni" rare, anche queste, per restare in tema con l'altro 3D
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    Utente di HTML.it L'avatar di mark2x
    Registrato dal
    Nov 2005
    Messaggi
    1,940
    Originariamente inviato da andr3a
    ogni operazione di amministrazione è autorizzata ad essere eseguita solo se l'utente ha un riscontro reale degli hash memorizzati sulla sessione in database con la lista degli autorizzati, sempre in database, e solo se i privilegi sono sufficienti.
    E fin qui non piove.

    sito_B può fare tutto quello che vuole ma non sarà riconosciuto come un utente autenticato
    Epperchè? Il browser invia comunque il SID (diciamo immagazzinato in un cookie) al server del Sito_A e propaga la sessione. Non è il sito ad "essere un utente", ma il browser...

    se il referer è quello predefinito e non quello di un altro sito.
    Se questa è la motivazione di cui sopra, allora ok.
    EDIT: ma non era facilmente "spoofabile"?

    Per avere un sito_B ad hoc per fare queste cose bisogna che tale sito sappia esattamente come agire nella "mia" area di amministrazione
    Sì certo.

    A quel punto un controllo in javascript tipo "sei sicuro che vuoi distruggere tutto ?" prima di effettuare l'operazione potrebbe salvare ulteriormente l'utente.
    Assolutamente no, l'hacker punterebbe direttamente alla pagina punatata dal JavaScript, non a quella prima...

    Un insieme di "collisioni" rare, anche queste, per restare in tema con l'altro 3D

    [.:: JaguarXF ::.]
    __________________

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.