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

    problemi di sicurezza con accesso ad area riservata

    ho fatto per la prima volta un accesso ad un'area riservata in cui l'autenticazione avviene solo tramite un campo, di solito l'ho sempre fatta con password e nome utente e non ho mai avuto problemi di sicurezza, ma mi è stato chiesto di fare un accesso solo tramite codice, solo he ho riscontrato un piccolo problemino con la sicurezza

    non posso fare l'accesso tramite htacces, quindi l'ho dovuto fare con uno script ma ho questo problema; il campo lo recupero da un form e faccio:

    codice:
    $codice = strip_tags(stripslashes(trim($_POST['codice'])));
    e questa è la query con cui recupero i dati [ho fatto un controllo che la stringa non sia il semplice carattere %]

    codice:
    $sql = "SELECT * FROM `alert` WHERE `codice` LIKE '".$codice."'";
    apparentemente mi sembrava perfetta ma poi ho voluto fare una prova, ricordandomi di un corso che avevo fatto tempo fa, e ho inserito nel campo codice questa stringa: %' OR 'a' = 'a e magicamente entra nell'area amministrativa, in quanto la query mi diventerebbe:
    codice:
    SELECT * FROM `alert` WHERE `email` LIKE '%' OR 'a' = 'a'
    ecco ora la domanda? come lo risolvo il mio problema? [penso sia una cavolata ma non mi viene in mente al momento ]

    seconda domanda...c'è un tutorial che spieghi come proteggersi e che controlli fare sulle variabili al fine di evitare attacchi non voluti?




    p.s. ho scritto soprattutto per la seconda domanda e per sapere se qualcuno adotta particolari accorgimenti quando deve creare un accesso protetto da password! per il primo problema penso che se mi guardo ancora il manuale riesco a risolvere...è che non mi ricordo il nome della funzione che controlla se c'è una determinata stringa all'interno di un'altra e non so che chiave di ricerca usare
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  2. #2
    ok! la funzione era strpos e ho risolto il primo problema

    ma se qualcuno ha comunque suggerimenti ben vengano!





    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  3. #3
    dalla query vedo che il codice che stai controllando è in realtà un indirizzo email. puoi risolvere verificando che l'indirizzo email che viene passato sia valido dal punto di vistra strutturale (e quindi privo di caratteri speciali come apici o simboli di percentuale).

    per il controllo sulla validità strutturale delle email ho scritto questa funzione, dovrebbe andar bene per la stragrande maggioranza degli indirizzi email possibili:

    Codice PHP:
    function valid_email($address) {
        if (
    eregi("^[\'+\\./0-9A-Z^_\`a-z{|}~\-]+@[a-zA-Z0-9_\-]+(\.[a-zA-Z0-9_\-]+){1,3}$"$address))
            return 
    true;
        else 
            return 
    false;

    in generale per controlli di questo tipo bisogna scrivere un'espressione regolare che validi solo ed esclusivamente le stringhe formate da lettere dell'alfabeto e numeri (più gli eventuali altri caratteri che ci servono caso per caso...), ma che escluda i caratteri potenzialmente pericolosi come apici e % in particolare.

  4. #4
    grazie per aver risposto!

    si scusa...in realtà io controllo un codice, la mail è per l'iscrizione, ed in base a quella viene fornito un codice che può contenere qualsiasi carattere tranne spazi, e per questo ho usato la funzione strpos che controllo le occorrenze degli spazi.

    per la mail, se posso, ti suggerisco di usare questa funzione di andr3a, che sembra essere la migliore che c'è in giro al momento:

    codice:
    function checkMail( $m ) {
    	// andr3a / HTML.IT
    	$r = "([a-z0-9]+[\._\-]?){1,3}([a-z0-9])*";
    	$r = "/(?i)^{$r}\@{$r}\.[a-z]{2,6}$/";
    	return preg_match($r, $m);
    }


    per la mia domanda sulla sicurezza hai idee?





    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  5. #5
    nessuno?
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  6. #6
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Proteggersi dalla SQL Injection:
    http://freephp.html.it/articoli/view...p?id=123&pag=1


    secondo me ti conviene memorizzare il codice protetto con MD5 all'interno del db, dentro un campo CHAR(32), poi per verificare l'autenticazione fai subito un:
    codice:
    SELECT campo FROM tabella WHERE campo = MD5('$valore');
    dove $valore ti arriva dal form, ed è stata ripulita con trim, mysql_escape_string, htmlentites, etc.


    think simple think ringo

  7. #7
    Originariamente inviato da marketto
    secondo me ti conviene memorizzare il codice protetto con MD5 all'interno del db, dentro un campo CHAR(32), poi per verificare l'autenticazione fai subito un:
    codice:
    SELECT campo FROM tabella WHERE campo = MD5('$valore');
    dove $valore ti arriva dal form, ed è stata ripulita con trim, mysql_escape_string, htmlentites, etc.
    Con la password personalmente faccio cosi': la prima operazione possibile appena arrivato nella pagina.

    $pwd = MD5($_POST['password']);

    Me ne impippo di verificare la pwd. Se ci sono caratteri strani non ci sara' corrispondenza nel db e nello stesso tempo lo user puo' utilizzare tutti i caratteri che vuole.

    Per le sql injection trovi una tonnellata di materiale specie su siti universitari... Sono comunque facili da parare. Quella stringa di 13manuel84 e' passata perche' l'avra' eseguita direttamente da shell (phpmyadmin).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Originariamente inviato da marketto
    Proteggersi dalla SQL Injection:
    http://freephp.html.it/articoli/view...p?id=123&pag=1


    secondo me ti conviene memorizzare il codice protetto con MD5 all'interno del db, dentro un campo CHAR(32), poi per verificare l'autenticazione fai subito un:
    codice:
    SELECT campo FROM tabella WHERE campo = MD5('$valore');
    dove $valore ti arriva dal form, ed è stata ripulita con trim, mysql_escape_string, htmlentites, etc.


    in effetti sono un cretino, io salvo l'md5 nel database ma andavo a confrontare il valore originale

    non so se ridere o picchiare la testa contro il muro, md5 l'ho sepre usato anche quando l'accesso lo faccio con pass e nome utente e non capisco perché qui non l'abbia usato


    Originariamente inviato da piero.mac
    Con la password personalmente faccio cosi': la prima operazione possibile appena arrivato nella pagina.

    $pwd = MD5($_POST['password']);

    Me ne impippo di verificare la pwd. Se ci sono caratteri strani non ci sara' corrispondenza nel db e nello stesso tempo lo user puo' utilizzare tutti i caratteri che vuole.

    Per le sql injection trovi una tonnellata di materiale specie su siti universitari... Sono comunque facili da parare. Quella stringa di 13manuel84 e' passata perche' l'avra' eseguita direttamente da shell (phpmyadmin).

    la mia stringa mi è passata ma l'ho inserita direttamente nel form

    vedrò di documentarmi meglio sulle sql injection...




    Grazie ad entrambi
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

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.