Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Problema di sicurezza su un mio sito!

    Ciao a tutti!
    Premetto che non sono un esperto di sicurezza informatica, e vorrei esporvi un quesito: oggi vengo a sapere che alcune pagine di un mio sito sono state violate. Sono stati aggiunti dei link che pubblicizzano dei sandali... e non riesco a capire come ciò sia stato possibile!
    Il contenuto delle pagine viene salvato all'interno di una tabella in un database mysql. Per accedere al pannello di controllo del sito che permette la modifica delle pagine, bisogna inserire una password (lunga 6 caratteri, mi rendo conto che non sia il massimo della sicurezza).
    La password viene salvata in una tabella mysql apposita, ma escludo un SQL-injection dato che l'input che prendo dal form che chiede di inserire la password non l'ho utilizzo direttamente in una query SQL, ma lo confronto con una stringa che viene valorizzata attraverso una query SQL che si occupa di recuperare la reale password dal database.
    Adesso ho provato a cambiare l'indirizzo del pannello di controlo da "/admin" a qualcosa di più complesso. Stessa cosa per la password, ne ho scelta una più lunga e con più numeri.
    C'è qualcuno esperto di sicurezza che potrebbe aiutarmi a capire come ciò sia stato possibile??

    Grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453

    Re: Problema di sicurezza su un mio sito!

    Originariamente inviato da Dreamer89
    Ciao a tutti!
    Premetto che non sono un esperto di sicurezza informatica, e vorrei esporvi un quesito: oggi vengo a sapere che alcune pagine di un mio sito sono state violate. Sono stati aggiunti dei link che pubblicizzano dei sandali... e non riesco a capire come ciò sia stato possibile!
    Il contenuto delle pagine viene salvato all'interno di una tabella in un database mysql. Per accedere al pannello di controllo del sito che permette la modifica delle pagine, bisogna inserire una password (lunga 6 caratteri, mi rendo conto che non sia il massimo della sicurezza).
    La password viene salvata in una tabella mysql apposita, ma escludo un SQL-injection dato che l'input che prendo dal form che chiede di inserire la password non l'ho utilizzo direttamente in una query SQL, ma lo confronto con una stringa che viene valorizzata attraverso una query SQL che si occupa di recuperare la reale password dal database.
    Adesso ho provato a cambiare l'indirizzo del pannello di controlo da "/admin" a qualcosa di più complesso. Stessa cosa per la password, ne ho scelta una più lunga e con più numeri.
    C'è qualcuno esperto di sicurezza che potrebbe aiutarmi a capire come ciò sia stato possibile??

    Grazie.
    Senza codice o senza postare il sito dubito che ti si possa aiutare

  3. #3
    Utente di HTML.it L'avatar di las
    Registrato dal
    Apr 2002
    Messaggi
    1,221
    E' un po come chiedere da dove sono entrati i ladri in casa mia?
    ... porta, finestre, botola, terrazzo, scantinato, avevano le chiavi, hanno dato la mancia al portire .... le possibilità sono praticamente infinite è impossibile determinare come senza nemmeno dare un occhiata alla casa.

    e poi tieni presente che se sei in hosting alcune di queste possibilità esulano pure dal tuo controllo, magari hanno bucato il server e tu non ci puoi fare nulla.

    Il calcolatore è straordinariamente veloce, accurato e stupido.
    L'uomo è incredibilmente lento, impreciso e creativo.
    L'insieme dei due costituisce una forza incalcolabile.
    (Albert Einstein)

  4. #4
    Lo so mi rendo conto che se postassi il sorgente sarebbe tutto molto più semplice! Il fatto è che dovrei postare tanto codice e non so se ci sia qualcuno così tanto paziente! :P Più che altro volevo sapere se ci fosse un errore che si commette tipicamente, come ad esempio l'SQL-injection.
    Dato che non sono un esperto di sicurezza pensavo che mi si potesse consigliare qualcosa di generico, ma se c'è qualcuno disposto a spulciare il codice allora lo posterei volentieri!

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Originariamente inviato da Dreamer89
    Lo so mi rendo conto che se postassi il sorgente sarebbe tutto molto più semplice! Il fatto è che dovrei postare tanto codice e non so se ci sia qualcuno così tanto paziente! :P Più che altro volevo sapere se ci fosse un errore che si commette tipicamente, come ad esempio l'SQL-injection.
    Dato che non sono un esperto di sicurezza pensavo che mi si potesse consigliare qualcosa di generico, ma se c'è qualcuno disposto a spulciare il codice allora lo posterei volentieri!
    Seguendo l'esempio di las, l'unica cosa da dirti sarebbe chiudere bene le finestre e la porta e mettere un antifurto, quindi stai attento o controlla che tutte le variabili pubbliche che passano dalle query siano coperte, fai un piccolo logs o guarda dal pannello di amministrazione quali pagine vengono visitate e cambia la password del pannello admin o nascondilo meglio

  6. #6

    Re: Problema di sicurezza su un mio sito!

    Originariamente inviato da Dreamer89
    l'input che prendo dal form che chiede di inserire la password non l'ho utilizzo direttamente in una query SQL, ma lo confronto con una stringa che viene valorizzata attraverso una query SQL che si occupa di recuperare la reale password dal database.
    Già questo mi suona strano come procedimento...
    In pratica, ipotizzando un codice "normale", tu verifichi che la pass inserita sia identica a quella salvata nel db in chiaro e con la select che recupera direttamente i dati inseriti nel form:
    select * from users where utente = 'pippo' and password = 'mia password'...

    Le password vanno salvate criptate e non si deve fare la select comprendendo nella where "la password" ma si deve fare la select che recuperi la password dell'utente (che ricordiamo è criptata) e confrontare che la password inserita nel form (opportunamente sanitizzata e a sua volta criptata con lo stesso algoritmo) corrisponda a quella recuperata dal db.

    select * from users where utente = 'pippo'

    Al che cripti la password in ingresso dal form e la confronti con quella che risulta dalla select.
    Detto questo, assicurati che la parte di recupero dati sanitizzi l'input: intanto un bel trim, poi un controllo di tipo regexp che il dato sia di tipo alfanumerico
    Codice PHP:
    $valid = ( ! preg_match("/^([\p{L}a-z0-9])+$/i"$str)) ? FALSE TRUE
    e poi un'altra serie di htmlentity e compagnia bella. Cerca per esempio in questo link dei suggerimenti: http://ha.ckers.org/xss.html


  7. #7

    Re: Re: Problema di sicurezza su un mio sito!

    Originariamente inviato da Dascos
    Già questo mi suona strano come procedimento...
    In pratica, ipotizzando un codice "normale", tu verifichi che la pass inserita sia identica a quella salvata nel db in chiaro e con la select che recupera direttamente i dati inseriti nel form:
    select * from users where utente = 'pippo' and password = 'mia password'...

    Le password vanno salvate criptate e non si deve fare la select comprendendo nella where "la password" ma si deve fare la select che recuperi la password dell'utente (che ricordiamo è criptata) e confrontare che la password inserita nel form (opportunamente sanitizzata e a sua volta criptata con lo stesso algoritmo) corrisponda a quella recuperata dal db.

    select * from users where utente = 'pippo'

    Al che cripti la password in ingresso dal form e la confronti con quella che risulta dalla select.
    Detto questo, assicurati che la parte di recupero dati sanitizzi l'input: intanto un bel trim, poi un controllo di tipo regexp che il dato sia di tipo alfanumerico
    Codice PHP:
    $valid = ( ! preg_match("/^([\p{L}a-z0-9])+$/i"$str)) ? FALSE TRUE
    e poi un'altra serie di htmlentity e compagnia bella. Cerca per esempio in questo link dei suggerimenti: http://ha.ckers.org/xss.html

    Grazie Dascos.
    La password la salvo in chiaro nel db, ma come ho già detto non eseguo una query con dentro l'input dell'utente. Ma eseguo una semplice select che mi vada a recuperare la password presente nel database (un pò come il tuo esempio, ma senza user), poi in PHP faccio un semplice controllo tra le due stringhe.

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.