Pagina 2 di 2 PrimoPrimo 12
Visualizzazione risultati 31 fino 51 di 51

Discussione: php password da file esterno

  1. #31
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Citazione Originalmente inviato da miniscript Visualizza messaggio
    Essendo un file come tanti altri potrebbe essere letto perchè il server va in tilt.

    Citazione Originalmente inviato da miniscript Visualizza messaggio
    1) i diversi applicativi del nostro sito possono salvare variabili di sessione che possono andare in conflitto fra di loro.

    3) Se la cartella è unica potrebbero andare in conflitto le sessioni del sito A con quelle del sito B (ma credo che siano separate).
    Non credo; cioè ovvio che sono separate: hai detto tu stesso che sono salvate in file che si chiamano diversamente: quindi gli "indici" delle sessioni anche se uguali, sono salvati in file diversi...
    Citazione Originalmente inviato da miniscript Visualizza messaggio
    2) gli amministratori di AV possono tranquillamente sbirciare i file di sessione (non mi fido di nessuno... )
    Beh, allora diciamo anche che potrebbero arrivare nelle varie server-house dove ci sono i server di AV dei ladri che di notte ti cancellano il sito

    Gli amministratori, se vogliono crakkarti il sito non vanno a leggerti le varie sessioni, ma direttamente (visto che lo spazio è loro), possono cancellare/modificare direttamente il sito!

    Morale: io, per adesso, mi fido dei dati nelle sessioni


    Ciao!
    Ultima modifica di alemoppo : 13-02-2011 alle ore 15.54.57

  2. #32
    Guest

    Predefinito

    Anche io mi fido dei dati di sessione... solo che nel 99% dei casi è superfluo salvare all'interno dati sensibili... quindi evito.

    Inoltre stai attento alla gestione delle variabili di sessione... ti faccio un esempio mooooolto realistico in riferimento al punto 1) cioè:
    i diversi applicativi del nostro sito possono salvare variabili di sessione che possono andare in conflitto fra di loro.

    --------------------------------------------------------
    Il 99% degli utenti di altervista scarica script dalla rete, prova ad istallarli, se nn compaiono a video errori e "funzionano" sono felici e contenti. Perfetto!

    Poniamo che l'utente-amministratore X abbia un sistema di login per accedere al pannello di amministrazione che esegue il seguente controllo:
    Codice PHP:
    <?php
    // in $_SESSION['login'] salviamo la nostra password in chiaro...
    if(!isset($_SESSION['login'])) { exit('accesso negato'); }
    ?>
    ... sempre lo stesso utente-amministratore X un giorno vuole istallare una chat nel proprio sito e inizia a cercare sul web uno script che "funzioni"... bhè lo trova... lo istalla... funziona. Ottimo!

    Ovviamente non capendo una mazza di php non legge il sorgente... tanto "funziona"!!

    Ebbene tale chat prevede un sistema di registrazione-login. Dopo essersi registrato l'utente-visitatore Y si logga... tutto va liscio. La chat a seguito del login crea una variabile di sessione chiamata $_SESSION['login']... che coincidenza... la stessa variabile che serve per accedere al panenllo di amministrazione... ... ...

    ... e se la chat si serve di $_SESSION['login'] per salvare l'username per stamparlo a video...?

    ... fidati dei dati di sessione... ma stacci attento...
    Ultima modifica di miniscript : 13-02-2011 alle ore 16.19.50

  3. #33
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Ah beh.. non avevo capito che intendevi i CMS... Per quel che mi riguarda, uso soltanto sorgenti che faccio io .... quindi ecco perché ho detto che sto sicuro con le sessioni



    .. Se poi due applicazioni vanno in contrasto, allora è vero. Ma io non ci avevo nemmeno pensato perché non utilizzo quelle cose

    Ciao!

  4. #34
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    uso soltanto sorgenti che faccio io
    ... tendenzialmente anche io... ma nn ho tutta questa fiducia in me stesso...

  5. #35
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    faccio i miei complimenti a miniscript!!! per il sistema login...

    ma tornando al titolo del post, da file esterno, mi sono accorto che semplicemente basta usare un file php per archiaviare i dati....

    cosa ne pensi miniscript?.. che vedo che sei informato

    file utenti.php (esempio):
    Codice PHP:
    <?php header("HTTP/1.0 404 Not Found");
    die();
    ?>
    mommi,ABC123|
    account2,34567|
    account3,456789000796|
    account4,456789000796|
    account5,456789000796|
    account6,456789000796|
    account7,456789000796|
    account8,456789000796|
    account9,456789000796|
    account10,456789000796|
    account11,456789000796|
    account12,456789000796
    file di login index.php:
    Codice PHP:
    <?php
    if (!$_SESSION) session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>
    <strong><span class="style1"><em>
    <?php
    if ($_POST && !is_array($_POST)) die("<p>Hack Attempt!");

    if (isset(
    $_POST["entra"]) && !is_array($_POST["entra"])){

    if (!isset(
    $_SESSION['token_time']) || $_SESSION['token_time']=="") die ("<p><a href=\"index.php\">I Cookie devono essere abilitati - Riprova!</a>");

    $token_age = time() - $_SESSION['token_time'];

    if (
    $token_age <= 10) die ("<p><a href=\"index.php\">Non Così in Fretta (Attacco CSRF/XSRF) - Riprova!</a>");

    if (isset(
    $_SESSION['token']) && $_POST['token'] == $_SESSION['token']){

    if (isset(
    $_POST["user"]) && !empty($_POST["user"]) && isset($_POST["pass"]) && !empty($_POST["pass"])){
    //echo "<p>".var_dump($_POST);
    //echo "<p>";print_r (array_keys ($_POST));

    $us = $_POST["user"];
    $pw = $_POST["pass"];

    $_SESSION['login']=false;
    $_SESSION['utente']="";

    $file="utenti.php";
    $apri=fopen($file, 'r+');
    $contenuto=fread($apri, filesize($file));
    $array=explode('|', $contenuto);

    foreach(
    $array as $valore) {
    list(
    $user_name, $pass_word)=explode(',', $valore);

    echo
    "<p>";print_r($valore);

    //se crypti le password nel file utenti.txt :
    //if (trim($user_name) == $us && trim($pass_word) == md5($pw))
    if (trim($user_name) == $us && trim($pass_word) == $pw)
    {
    $_SESSION['login']=true;
    //toglie gli spazi all'inizio e alla fine della stringa:
    $_SESSION['utente']=trim($us);
    //metti il redirect oppure il link:
    //header("Location: area_privata.php");
    echo "<p><a href=\"area_privata.php\">Login Effettuato Correttamente, clicca qui per accedere all'area riservata.</a>";
    //termina :
    die();
    }

    }

    fclose($apri);

    if (
    $_SESSION['login']==false) echo "<p><a href=\"index.php\">Accesso Negato - Errore Login Riprova!</a>";

    }else echo
    "<p><a href=\"index.php\">Errore : Username e Password Obbligatori!</a>";

    }
    //token
    else die ("<p><a href=\"index.php\">Attacco CSRF/XSRF - Riprova!</a>");

    }
    //tokens:
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();

    ?>

    <form action="index.php" method="post" name="">

    <input type="hidden" name="token" value="<?=$token?>">

    *Username : <input name="user" type="text">
    <br>
    *Password : <input name="pass" type="password">
    <p></p>
    <input name="entra" type="submit" value="Entra">
    </form>
    </em></span></strong>
    </body>
    </html>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  6. #36
    Guest

    Predefinito

    non sò che esito possano avere le funzioni fopen()/fread() o file() su un file di questo tipo ed, in ogni modo, mi sembra una soluzione pessima.

    Premessa: un sistema di login multiutenza per avere un certo grado di sicurezza richiede il db mysql

    ... se nn si dispone di mysql utilizzare per avere un minimo di sicurezza occorre costruire degli array con 1 o + file .php che costruiscono array multidimensionali...

    feci una volta una cosa per mio fratello che stava smanettando per un suo sitino qui su AV... ma mi sono ripromesso di nn fare mai + cose squallide di quel genere.

  7. #37
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    meglio sempre che utilizzare un file .txt, ho sempre lavorato con database mysql, e non ho molta esperienza con database che si appoggiano su file...

    qui su AV ci sono state discussioni che riguardavano proprio l'utilizzo di database esterni su file, e mi sembra che qualcune avesso costruito siti di quel genere.

    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  8. #38
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Io mi trovo benissimo su db basati su file di testo (sqlite)...

    Ciao!

  9. #39
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    alemoppo, puoi darci delle dritte per sqlite, come si installa? ect..

    bisogna realizzare un sistema su file il più possibile completo, file registrazione utenti ecc...
    quali dati si vogliono registrare oltre username e password, es. nome,email,ip

    raja spiegati meglio....
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  10. #40
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Veramente SQLite è molto di più di un semplice file di testo...
    Molti software ne fanno uso, uno tra questi è firefox.

    Qui, su altervista, è già attiva la libreria che permette di creare e interagire con database di quel tipo; consulta la documentazione ufficiale: http://www.php.net/manual/en/class.sqlite3.php

  11. #41
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Beh, sqlite è già integrato in PHP5, quindi non c'é nessuna operazione di installazione o altro.

    Una volta, con PHP c'era mysql, ma adesso si sono "divisi" e PHP ha un nuovo database integrato.. sqlite.

    Sqlite è molto simile a mysql. Faccio un esempio:

    Codice PHP:

    $sq
    = sqlite_open("database.db", 0666, $sqlite_error); //Se non esiste il file, verrà creato automaticamente!

    sqlite_query($sq, "CREATE TABLE utenti (nome_utente CHAR(10) PRIMARY KEY, pass CHAR(20) NOT NULL, data_iscrizione INTEGER NOT NULL)");

    $query = sqlite_query($sq,"SELECT nome_utente FROM utenti WHERE pass='ciao'");

    //...
    Ultima cosa: sqlite non è performante quanto mysql, ma per siti di piccole-medie dimensioni va benissimo

    Qui c'é tutto

    Ciao!

    EDIT: anticipato...
    Ultima modifica di alemoppo : 14-02-2011 alle ore 13.59.39

  12. #42
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    un grazie a javascripter e alemoppo....

    sono tornato adesso dal lavoro, domani darò un'occhiata al manuale e documentazione.....

    quindi essendo integrato in php5, basta richiamare le funzioni e i comandi, ma i dati vengono salvati in un file , ma questo file è visibile, nel senso che ci si può accedere liberamente? o com'è?

    nel mentre sto mettendo giù diverse funzioni per un mio sistema su file .php

    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  13. #43
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,573

    Predefinito

    Nel mio esempio crea un file "database.db"... un po come la fopen()...

    Ci si può accedere "liberamente", anche se è in formati binario (aprendolo con ad esempio blocco-note non si capisce un gran ché ).

    Comunque, per sicurezza io lo proteggo sempre con .htaccess ... anche se teoricamente è impossibile sapere come è il vero nome del file... Quindi difficile rintracciarlo in modo "brute-force"

    Ciao!

  14. #44
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    be penso che sia abbastanza semplice come utilizzo sqlite...

    ho realizzato alcune funzioni per l'archiviazione di dati in un file .php, anche archiviare dati sensibili in quanto sfrutto l'algoritmo di blowfish...

    come test o prova ho realizzato questo, e direi che funziona abbastanza bene:
    Codice PHP:
    <?php
    require "blowfish.php";

    function
    Verify_User_Name($user_name)
    {
    if (
    strlen($user_name)<4 || strlen($user_name)>8) return false;
    $good_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
    for(
    $x=0; $x<strlen($user_name); $x++){
    $c_user_name = substr($user_name, $x, 1);
    $pos_good_chars = strrpos($good_chars, $c_user_name);
    if (
    $pos_good_chars === false) return false;
    }
    return
    true;
    }

    function
    passwdGen($length = 8)//Random password generator
    {
    $str = 'abcdefghijkmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    for (
    $i = 0, $passwd = ''; $i < $length; $i++)
    $passwd .= substr($str, mt_rand(0, strlen($str) - 1), 1);
    return
    $passwd;
    }

    function
    write_utenti($user_name,$pass_word)
    {
    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pass_word.$salt);
    $key = "GT348DJ_-DD+34";//conf. a piacere
    $us = PMA_blowfish_encrypt($user_name, $key);

    $file="utenti.php";
    if (@
    file_exists($file)) {
    $fp = @fopen($file, "a+");
    @
    fwrite($fp,$us.",".$pw."\n");
    @
    fclose($fp);
    return
    true;
    }else return
    false;
    }

    function
    read_utenti($command, $us)
    {
    $file="utenti.php";
    if (@
    file_exists($file)) {
    $lines = file($file);
    unset(
    $lines[0]); //escludo <?php header ...
    sort($lines);

    if (
    $command=="verify_user" && isset($us)){
    $key = "GT348DJ_-DD+34";
    $us = PMA_blowfish_encrypt($us, $key);

    foreach(
    $lines as $valore) {
    list(
    $user_name, $pass_word)=explode(',', trim($valore));
    if (
    trim($user_name) == $us) return false;
    }
    return
    true;
    }else return
    $lines;

    } else {
    return
    "<p>Il File non è stato creato!";//false
    }
    }

    if (!
    $_SESSION) session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>
    <head>
    <title>Untitled</title>
    </head>
    <body>

    <?php
    if ($_POST && !is_array($_POST)) die("<p>Hack Attempt!");

    if (isset(
    $_POST["registra"]) && !is_array($_POST["registra"])){

    if (!isset(
    $_SESSION['token_time']) || $_SESSION['token_time']=="") die ("<p><a href=\"register_php.php\">La Sessione è Scaduta o i Cookie sono Disabilitati - Riprova!</a>");

    $token_age = time() - $_SESSION['token_time'];

    if (
    $token_age <= 10) die ("<p><a href=\"register_php.php\">Non Così in Fretta (Attacco CSRF/XSRF) - Riprova!</a>");

    if (isset(
    $_SESSION['token']) && $_POST['token'] == $_SESSION['token']){

    $error="";

    if (isset(
    $_POST["user"]) && !empty($_POST["user"])) $us = $_POST["user"];
    else
    $error.="<p><a href=\"register_php.php\">Errore: Username Obbligatorio - Riprova!</a>";

    if (empty(
    $_POST["pass"]) && $_POST["random"]==false) $error.="<p><a href=\"register_php.php\">Errore: Password Obbligatoria - Riprova!</a>";
    else if (
    $_POST["random"]==true) $pw=passwdGen();
    else {
    $pw = $_POST["pass"];
    if (
    strlen($pw)<6 || strlen($pw)>10) $error.="<p><a href=\"register_php.php\">Errore: Password Invalida(6-10 caratteri) - Riprova!</a>";
    }

    if (!
    Verify_User_Name($us)) $error.="<p><a href=\"register_php.php\">Errore: Username Invalido(a-z,A-Z,0-9,_) - Riprova!</a>";
    if (!
    read_utenti("verify_user", trim($us))) $error.="<p><a href=\"register_php.php\">Errore: Username già Esistente - Riprova!</a>";

    if (!
    $error) {

    if (
    write_utenti(trim($us),trim($pw))) echo "<p>Registrazione Effettuata! Username: $us";
    else echo
    "<p>Errore: Registrazione Non Effettuata!";

    }
    //error
    else echo $error;

    }
    //token
    else die ("<p><a href=\"register_php.php\">Attacco CSRF/XSRF - Riprova!</a>");

    }
    //tokens:
    $token = md5(uniqid(rand(), TRUE));
    $_SESSION['token'] = $token;
    $_SESSION['token_time'] = time();

    ?>
    <div align="center">
    <form action="register_php.php" method="post" name="">
    <table summary="">

    <tr>
    <td align="left">
    *Username :
    <br>
    *Password :
    </td>
    <td align="left">
    <input name="user" type="text">
    <br>
    <input name="pass" type="password">
    </td>
    <td align="left">
    <p></p><br>
    Casuale ? <input name="random" type="checkbox">
    </td>
    <tr>
    <td colspan="2" align="center">
    <p></p>
    <input type="hidden" name="token" value="<?=$token?>">
    <input name="registra" type="submit" value="Registra">
    </td>

    </tr>
    </table>
    </form>
    </div>

    <?
    $key
    = "GT348DJ_-DD+34";

    $lines=read_utenti("","");

    if (
    is_array($lines)) {

    echo
    "<p>Lista File:";//print_r($lines);

    foreach($lines as $valore) {
    list(
    $user_name, $pass_word)=explode(',', trim($valore));

    //$us = PMA_blowfish_decrypt($user_name, $key);

    echo "<p>User =".$user_name." | Pass=".$pass_word;
    //echo "<br>User_Decryp=".$us. " | Pass=".$pass_word;

    }
    }else echo
    $lines;

    ?>

    </body>
    </html>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  15. #45
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    Ho fatto alcune modifiche alle funzioni in precedenza scritte e aggiunto nuove funzioni...

    in pratica ho aggiunto l'email e l'ip....alla registrazione su file....e Reset Password

    però vorrei che qualcuno gentilmente potesse consigliarmi su come registrare l'indirizzo ip dell'utente, in quanto ora registro i primi 2 valori che in teoria non dovrebbero cambiare per connessione dallo stesso computer....

    ma se l'utente già registrato cambia computer e connessione....potrebbe effettuare un'altra registrazione...e avere 2 o più account..!!!???

    in più non so se registrare anche l'host....

    anche se trovate qualcosa di anomalo nelle funzioni o nel codice...

    qui c'è il codice solo delle funzioni , perchè tutto il codice troppo lungo nell'editing:
    Codice PHP:
    <?php

    function Verify_User_Name($user_name)
    {
    if (
    strlen($user_name)<4 || strlen($user_name)>8) return false;
    $good_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_";
    for(
    $x=0; $x<strlen($user_name); $x++){
    $c_user_name = substr($user_name, $x, 1);
    $pos_good_chars = strrpos($good_chars, $c_user_name);
    if (
    $pos_good_chars === false) return false;
    }
    return
    true;
    }

    function
    Verify_Email_Address($email_address) {
    $filter_email = "/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/";
    if (
    preg_match($filter_email, $email_address)) return true;
    else return
    false;
    }

    function
    passwdGen($length = 8)//Random password generator
    {
    $str = 'abcdefghijkmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    for (
    $i = 0, $passwd = ''; $i < $length; $i++)
    $passwd .= substr($str, mt_rand(0, strlen($str) - 1), 1);
    return
    $passwd;
    }


    function
    getRemoteInfo () {
    $proxy = "";
    $ip = "";
    $remote_info = array();

    if (isSet(
    $_SERVER)) {
    if (isSet(
    $_SERVER["HTTP_X_FORWARDED_FOR"])) {
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    $proxy = $_SERVER["REMOTE_ADDR"];
    } elseif (isSet(
    $_SERVER["HTTP_CLIENT_IP"])) {
    $ip = $_SERVER["HTTP_CLIENT_IP"];
    } else {
    $ip = $_SERVER["REMOTE_ADDR"];
    }
    } else {
    if (
    getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
    $ip = getenv( 'HTTP_X_FORWARDED_FOR' );
    $proxy = getenv( 'REMOTE_ADDR' );
    } elseif (
    getenv( 'HTTP_CLIENT_IP' ) ) {
    $ip = getenv( 'HTTP_CLIENT_IP' );
    } else {
    $ip = getenv( 'REMOTE_ADDR' );
    }
    }
    /*if (strstr($IP, ',')) {
    $ips = explode(',', $IP);
    $IP = $ips[0];
    }*/

    $remote_info[0]=$ip;
    $remote_info[1]=get_ip_truncate($ip);
    $remote_info[2]=@GetHostByAddr($ip);
    $remote_info[3]=$proxy;
    return
    $remote_info;
    }

    function
    get_ip_truncate($ip){

    $pos1=strpos($ip, ".")+1;//restituisce la posizione del primo "." a partire da 0
    $v1=substr($ip,0,$pos1);
    $tronc=substr($ip,$pos1,strlen($ip));
    $pos2=strpos($tronc, ".")+1;
    $v2=substr($tronc,0,$pos2);
    return
    $v1.$v2;

    }

    function
    write_utenti($user,$pw,$email,$ip)
    {
    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    $key = "GT348DJ_-DD+34";//conf. a piacere
    $user = PMA_blowfish_encrypt($user, $key);
    $email = PMA_blowfish_encrypt($email, $key);
    $ip = PMA_blowfish_encrypt($ip, $key);

    $file="utenti.php";
    if (@
    file_exists($file)) {
    $fp = @fopen($file, "a+");
    @
    fwrite($fp,$user.",".$pw.",".$email.",".$ip."\n");
    @
    fclose($fp);
    return
    true;
    }else return
    false;
    }

    function
    read_utenti($command,$user,$email,$ip)
    {
    $file="utenti.php";
    if (@
    file_exists($file)) {
    $lines = file($file);
    unset(
    $lines[0]); //escludo <?php header ...
    sort($lines);

    if (!empty(
    $user) || !empty($email) || !empty($ip)) $key = "GT348DJ_-DD+34";

    if (
    $command=="verify_user" && !empty($user) && !empty($email) && !empty($ip)){//verifica username/email/ip se già presente
    $user = PMA_blowfish_encrypt($user, $key);
    $email = PMA_blowfish_encrypt($email, $key);
    $ip = PMA_blowfish_encrypt($ip, $key);

    foreach(
    $lines as $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));
    if (
    trim($user_name) == $user) return false;
    if (
    trim($email_address) == $email) return false;
    if (
    trim($ip_address) == $ip) return false;
    }
    return
    true;

    }else if (
    $command=="reset_password" && !empty($email)){//reset password casuale
    $email = PMA_blowfish_encrypt($email, $key);

    foreach(
    $lines as $line_num => $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));

    if (
    trim($email_address) == $email) {
    $pw=passwdGen();
    $email = PMA_blowfish_decrypt(trim($email_address), $key);
    $user = PMA_blowfish_decrypt(trim($user_name), $key);
    $ip = PMA_blowfish_decrypt(trim($ip_address), $key);

    //invio email con la nuova password:
    if (send_mail($_POST,"Reset Password !",$user,$pw,$email,$ip)) $send_mail=true;
    else
    $send_mail=false;

    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    $lines[$line_num]=trim($user_name).",".$pw.",".trim($email_address).",".trim($ip_address)."\n";

    if (
    file_put_contents($file,'<?php header("HTTP/1.0 404 Not Found");die();?>'."\n".implode('', $lines)."") && $send_mail==true) return true;
    else return
    false;
    //break;
    }else return false;//email non trovata

    }//foreach

    }else return $lines;

    } else return
    "<p>Il File non è stato creato!";//false
    }


    function
    send_mail($post,$subject,$user,$pw,$email,$ip)
    {

    //CONTROLLO HACKERS
    if(!is_secure($post)) {
    $subject = "Hack Attempt via Contact Form!";
    $body = " - Indirizzo IP: ".$ip."
    - Agent: "
    .getenv("HTTP_USER_AGENT")."";

    $emailto = "eurosalute@altervista.org";
    $headers = "From: $emailto";

    @
    mail($emailto, $subject, $body, $headers);
    die(
    "<br><br><font color=\"red\"><b>Possibile Attacco Hackers !</b></font><br><br>");
    }
    //end CONTROLLO HACKERS

    $to = $email;
    $from = "eurosalute@altervista.org";

    $subject = "".$user." - ".$subject."";
    $contenuto = "Username: ".$user."<br>Password: ".$pw."<br>Email: ".$to."<br>Computer IP: ".$ip."";

    $body = nl2br("\nMessaggio:\n__________\n".stripslashes($contenuto)."\n\nFrom: ".stripslashes($from)."\n__________\nFine Messaggio.\n");

    $headers = "MIME-Version: 1.0\r\n" ;
    $headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
    $headers .= "Content-Transfer-Encoding: 8bit\r\n";
    $headers .= "From: ".$from."\r\n";

    if(@
    mail($to, $subject, $body, $headers)) return true;
    else return
    false;

    }

    function
    is_secure($ar) {
    $reg = "/(Content-Type|Bcc|MIME-Version|Content-Transfer-Encoding)/i";

    //echo "<p>";print_r($ar);

    if(!is_array($ar)) {return preg_match($reg,$ar);}

    $incoming = array_values_recursive($ar);

    //echo "<p>";print_r($incoming);

    foreach($incoming as $k=>$v) if(preg_match($reg,$v)) return false;
    return
    true;
    }

    function
    array_values_recursive($array) {
    $arrayValues = array();
    foreach (
    $array as $key=>$value) {

    if (
    is_scalar($value) || is_resource($value)) {
    $arrayValues[] = $value;
    $arrayValues[] = $key;
    }
    elseif (
    is_array($value)) {
    $arrayValues[] = $key;
    $arrayValues = array_merge($arrayValues, array_values_recursive($value));
    }

    }
    return
    $arrayValues;
    }


    ?>
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  16. #46
    Guest

    Predefinito

    Codice PHP:
    <?php
    /*
    La funzione Verify_User_Name non se po vedè...
    la regex che ho proposto
    replica la "procedura" fatta da te
    ma io ci aggiungenrei anche
    i numeri, il . (punto) e il trattino basso _
    e metterei una lunghezza massima maggiore es. 50
    ... nel qual caso:
    $regex = '/^[a-zA-Z0-9_.-]{4, 50}$/';
    */
    function Verify_User_Name($user_name)
    {
    $regex = '/^[a-zA-Z_]{4,8}$/';
    return
    preg_match($regex, $user_name);
    }

    /*
    la funzione preg_match ha essa stessa un return boleano
    non sever introdurre condizioni come hai fatto te.
    */

    function Verify_Email_Address($email_address)
    {
    $filter_email = "/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/";
    return
    preg_match($filter_email, $email_address);
    }

    /*
    Se devi "consegnare" una password casuale
    evita il case sensitive...
    */
    function passwdGen($length = 8)//Random password generator
    {
    $str = 'abcdefghijkmnopqrstuvwxyz0123456789';
    $passwd = substr(str_shuffle($str), 0, $length);
    return
    $passwd;
    }

    /*
    La funzione getRemoteInfo() non è il massimo della vita...

    la ricerca dell'ip la puoi esegire con una delle
    tante classi / funzioni che puoi trovare sul web
    ...
    */


    /*
    ... il resto nn ho tempo adesso di leggerlo...
    */

  17. #47
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    grazie miniscript dei consigli e correzzioni....

    nella funzione Verify_User_Name i numeri li ho messi, questa funzione è una prova che ho fatto per l'utilizzo delle funzioni stringa, ma avevo già realizzato una regex.

    ottimo la random password generator, più semplice.

    guarda le altre funzioni, le ho modificate aggiungendo anche la Data:
    Codice PHP:
    <?php
    function write_utenti($user,$pw,$email,$ip,$data)
    {
    $file="utenti.php";
    if (@
    file_exists($file)) {

    //$data = date("D M j G:i:s T Y");

    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    $key = "GT348DJ_-DD+34";//conf. a piacere
    $user = PMA_blowfish_encrypt($user, $key);
    $email = PMA_blowfish_encrypt($email, $key);
    $ip = PMA_blowfish_encrypt($ip, $key);
    $data = PMA_blowfish_encrypt($data, $key);

    $fp = @fopen($file, "a+");
    @
    fwrite($fp,$user.",".$pw.",".$email.",".$ip.",".$data."\n");
    @
    fclose($fp);
    return
    true;
    }else return
    false;
    }

    function
    read_utenti($command,$user,$email,$ip,$pw)
    {
    $file="utenti.php";
    if (@
    file_exists($file)) {
    $lines = file($file);
    unset(
    $lines[0]); //escludo <?php header ...
    sort($lines);

    if (!empty(
    $user) || !empty($email) || !empty($ip)) $key = "GT348DJ_-DD+34";

    if (
    $command=="verify_user" && !empty($user) && !empty($email) && !empty($ip)){//verifica username/email/ip se già presente
    $user = PMA_blowfish_encrypt($user, $key);
    $email = PMA_blowfish_encrypt($email, $key);
    $ip = PMA_blowfish_encrypt($ip, $key);

    foreach(
    $lines as $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));
    if (
    trim($user_name) == $user) return false;
    if (
    trim($email_address) == $email) return false;
    if (
    trim($ip_address) == $ip) return false;
    }
    return
    true;

    }else if (
    $command=="log_in" && !empty($user) && !empty($pw) && !empty($ip)){//login
    $user = PMA_blowfish_encrypt($user, $key);

    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    foreach(
    $lines as $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));

    if (
    trim($user_name)==$user && trim($pass_word)==$pw) {
    //inviare email di login effettuato con la data
    return true;
    }

    }
    //foreach
    return false;

    }else if (
    $command=="reset_password" && !empty($email) && !empty($ip)){//reset password casuale
    $email = PMA_blowfish_encrypt($email, $key);

    foreach(
    $lines as $line_num => $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address,$data_reg)=explode(',', trim($valore));

    if (
    trim($email_address) == $email) {
    $pw=passwdGen();
    $email = PMA_blowfish_decrypt(trim($email_address), $key);
    $user = PMA_blowfish_decrypt(trim($user_name), $key);
    //$ip = PMA_blowfish_decrypt(trim($ip_address), $key);
    $data = PMA_blowfish_decrypt(trim($data_reg), $key);

    //invio email con la nuova password:
    if (send_mail("Reset Password !",$user,$pw,$email,$ip,$data)) $send_mail=true;
    else
    $send_mail=false;

    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    $lines[$line_num]=trim($user_name).",".$pw.",".trim($email_address).",".trim($ip_address).",".trim($data_reg)."\n";

    if (
    file_put_contents($file,'<?php header("HTTP/1.0 404 Not Found");die();?>'."\n".implode('', $lines)."") && $send_mail==true) return true;
    else return
    false;
    //break;
    }else return false;//email non trovata

    }//foreach

    }else return $lines;

    } else return
    "<p>Il File non è stato creato!";//false
    }


    function
    send_mail($subject,$user,$pw,$email,$ip,$data)
    {

    //CONTROLLO HACKERS
    if(!is_secure($_POST)) {
    $subject = "Hack Attempt via Contact Form!";
    $body = " - Indirizzo IP: ".$ip."
    - Agent: "
    .getenv("HTTP_USER_AGENT")."";

    $emailto = "eurosalute@altervista.org";
    $headers = "From: $emailto";

    @
    mail($emailto, $subject, $body, $headers);
    die(
    "<br><br><font color=\"red\"><b>Possibile Attacco Hackers !</b></font><br><br>");
    }
    //end CONTROLLO HACKERS

    $to = $email;
    $from = "eurosalute@altervista.org";

    $subject = "".$user." - ".$subject."";
    $contenuto = "Dati di Accesso:<p></p>Username: ".$user."<br>Password: ".$pw."<br>Email: ".$to."<br>Inviato da Computer IP : ".$ip."<br>Inviato il :".date("D M j G:i:s T Y")."<br>Account Registrato il : ".$data;

    $body = nl2br("\nMessaggio:\n__________\n".stripslashes($contenuto)."\n\nFrom: ".stripslashes($from)."\n__________\nFine Messaggio.\n");

    $headers = "MIME-Version: 1.0\r\n" ;
    $headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
    $headers .= "Content-Transfer-Encoding: 8bit\r\n";
    $headers .= "From: ".$from."\r\n";

    if(@
    mail($to, $subject, $body, $headers)) return true;
    else return
    false;

    }
    ?>
    il file di registrazione:
    Codice PHP:
    <?php
    require "blowfish.php";
    include
    "function_file_php.inc";
    if (!
    $_SESSION) session_start();
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>Registrazione</title>
    </head>
    <body>
    <?php
    if ($_POST && !is_array($_POST)) die("<p>Possibile Attacco Hackers !");

    if (isset(
    $_POST["registra"]) && !is_array($_POST["registra"])){

    if (empty(
    $_SESSION['token_time'])) die ("<p><a href='".$_SERVER['PHP_SELF']."'>La Sessione è Scaduta o i Cookie sono Disabilitati - Riprova!</a>");

    $token_age = time() - $_SESSION['token_time'];

    if (
    $token_age <= 10) die ("<p><a href='".$_SERVER['PHP_SELF']."'>Non Così in Fretta (Possibile Attacco CSRF/XSRF) - Riprova!</a>");

    if (isset(
    $_SESSION['token']) && $_POST['token'] == $_SESSION['token']){

    $error="";

    if (isset(
    $_POST["user"]) && !empty($_POST["user"])) $us = trim($_POST["user"]);
    else
    $error.="<p></p>Errore: Username Obbligatorio !";

    if (empty(
    $_POST["pass"]) && $_POST["random"]==false) $error.="<br>Errore: Password Obbligatorio !";
    else if (
    $_POST["random"]==true) $pw=passwdGen();
    else {
    $pw = trim($_POST["pass"]);
    if (
    strlen($pw)<6 || strlen($pw)>10) $error.="<br>Errore: Password Invalido(6-10 caratteri) !";
    }

    if (isset(
    $_POST["email"]) && !empty($_POST["email"])) $email = trim($_POST["email"]);
    else
    $error.="<br>Errore: Email Obbligatorio !";

    $remote_info=getRemoteInfo();
    if (isset(
    $remote_info[3]) && !empty($remote_info[3])) $error.="<br>Errore: No Connessione Proxy !";
    if (isset(
    $remote_info[1]) && !empty($remote_info[1])) $ip=trim($remote_info[1]);//get ip truncate
    else $error.="<br>Errore: No IP Rilevato !";

    if (!
    Verify_User_Name($us)) $error.="<br>Errore: Username Invalido(a-z,A-Z,0-9,_.-)(4-8 caratteri) !";
    if (!
    read_utenti("verify_user",$us,$email,$ip,"")) $error.="<br>Errore: Username o Email o IP già Esistente !";
    if (!
    Verify_Email_Address($email)) $error.="<br>Errore: Email Invalido !";


    if (!
    $error) {

    $data = date("D M j G:i:s T Y");
    if (
    write_utenti($us,$pw,$email,$ip,$data)) {
    if (
    send_mail("Registrazione Effettuata !",$us,$pw,$email,$ip,$data)) {
    echo
    "<p>Registrazione Effettuata!<p></p>Username: $us<br>Password: $pw<br>Email: $email<br>Inviato Computer IP: $ip<br>Data Registrazione: $data";
    echo
    "<p>Un Email è stato Inviato con i dati di Registrazione e Login.";
    }else echo
    "<p>Errore: L'invio del Email non è Riuscito!";
    }else echo
    "<p>Errore: Registrazione Non Effettuata!";

    }
    //error
    else echo "<font color='red'>".$error."</font>";

    }
    //token
    else die ("<p><a href='".$_SERVER['PHP_SELF']."'>Attacco CSRF/XSRF - Riprova!</a>");

    }

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

    ?>
    <div align="center">
    <form action="<?=$_SERVER['PHP_SELF']?>" method="post" name="">
    <table summary="">
    <tr>
    <td align="left">
    *Username :
    <p></p>
    *Password :<br>
    Casuale ? <input name="random" type="checkbox">
    <p></p>
    *Email :
    </td>
    <td align="left">
    <input name="user" type="text">
    <p></p>
    <input name="pass" type="password">
    <p></p>
    <input name="email" type="text">
    </td>
    <tr>
    <td colspan="2" align="center">
    <p></p>
    <input type="hidden" name="token" value="<?=$token?>">
    <input name="registra" type="submit" value="Registra">
    </td>
    </tr>
    </table>
    </form>
    </div>

    <?
    //troncato il codice non ci stava nell'editing
    ?>
    </body>
    </html>
    Ultima modifica di EuroSalute : 19-02-2011 alle ore 21.38.23 Motivo: ...info
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  18. #48
    Guest

    Predefinito

    Ho dato uno sguardo solo alla prima funzione write_utenti
    Codice PHP:
    <?php
    /*
    L'ho modificata alla buona ma dovrebbe
    essere fatto molto meglio...
    provo a spiegarti cosa penso

    La funzione write_utenti per come l'hai scritta darà un
    return TRUE purchè il file esiste...
    a prescindere se verrà scritto o meno
    Bhè... non è sufficiente...

    Occorre che per dare un return TRUE si abbia scritto sul file
    ... quindi se fwrite va a buon fine ok... altrimenti FALSE...

    da copia e incolla da php.net:
    fwrite() returns the number of bytes written, or FALSE on error.

    quindi se fallisce cmq ha un return FALSE

    Inoltre fai un iper abuso di @ quando invece
    gli errori più che "sopprimerli" con le @
    (evita la stampa a video ma l'errore cmq rimane...)
    bisognrebbe "prevenirli".

    Alle volte lo utilizzi inutilmente:
    file_exists() Returns TRUE if the file or directory
    specified by filename exists; FALSE otherwise.

    Quindi file_exists non darà mai un warning da sopprimere.
    otherwise=altrimenti/"in caso contrario"

    Le @ apposte ad fopen() e fread() si potrebbe
    chiudere un occhio
    ma è sicuramente meglio fare un controllo
    con le dovute funzioni che ci sono:
    - is_readable() => se bisogna leggerlo
    - is_writable() => se bisogna scriverlo

    Inoltre, ci sarebbe un discorso da fare
    sul lock del file con la funzione flock()...
    per evitare disastri se il file viene aperto e
    scritto in simultanea da due richieste al server...

    Infine i salt e le key presumo che dovranno
    essere riurilizzate in altre funzioni quindi:
    - fai un file di config.php/define.php
    in cui vado a definire una serie di costanti
    - se si potesse avere accesso al di fuori della
    DOCUMENT ROOT (qui si AV non si può)
    lo potresti metterle anche in un file .ini
    di cui farei un parse
    - oppure bisognerebbe creare una classe senza
    prevedere metodi di set/get per tali entità
    */
    function write_utenti($user,$pw,$email,$ip,$data)
    {
    $file="utenti.php";
    if (
    file_exists($file)) {

    //$data = date("D M j G:i:s T Y");

    $salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.$salt);

    $key = "GT348DJ_-DD+34";//conf. a piacere
    $user = PMA_blowfish_encrypt($user, $key);
    $email = PMA_blowfish_encrypt($email, $key);
    $ip = PMA_blowfish_encrypt($ip, $key);
    $data = PMA_blowfish_encrypt($data, $key);

    if(!
    is_readable($file) OR !is_writable($file))
    {
    return
    FALSE;
    }
    else
    {
    $fp = fopen($file, "a+");
    // piccola ma importante modifica
    if(!fwrite($fp,$user.",".$pw.",".$email.",".$ip.",".$data."\n"))
    {
    return
    FALSE;
    }
    fclose($fp);
    return
    true;
    }
    }
    else
    return
    false;
    }
    Ultima modifica di miniscript : 20-02-2011 alle ore 04.19.22

  19. #49
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    per la funzione write_utenti(), seguendo i tuoi consigli, ho fatto così:
    Codice PHP:
    function write_utenti($user,$pw,$email,$ip,$data)
    {
    $file="utenti.php";
    if (
    file_exists($file)) {

    if(!
    is_readable($file) OR !is_writable($file)) return false;

    //$salt = "GT348DJ_-DD+34";//conf. a piacere
    $pw = md5($pw.MD5_SALT);

    //$key = "GT348DJ_-DD+34";//conf. a piacere
    $user = PMA_blowfish_encrypt($user, BLOW_KEY);
    $email = PMA_blowfish_encrypt($email, BLOW_KEY);
    $ip = PMA_blowfish_encrypt($ip, BLOW_KEY);
    $data = PMA_blowfish_encrypt($data, BLOW_KEY);

    $fp = fopen($file, "a+");

    if (
    flock($fp, LOCK_EX)){
    if (!
    fwrite($fp,$user.",".$pw.",".$email.",".$ip.",".$data."\n")) return false;
    flock($fp, LOCK_UN);
    }else return
    false;

    fclose($fp);
    return
    true;

    }else return
    false;
    }
    per flock() non ho ben capito se devo implementare l'opzione LOCK_NB e sleep(), diventerebbe:
    Codice PHP:
    if (flock($fp, LOCK_EX | LOCK_NB)){
    if (!
    fwrite($fp,$user.",".$pw.",".$email.",".$ip.",".$data."\n")) return false;
    sleep(5); //aspetta 5 secondi prima di effettuare un'altra scrittura
    flock($fp, LOCK_UN);
    }else return
    false;
    praticamente, con LOCK_NB, flock() ritorna subito false, ed esclude sleep a 5 sec.


    per le costanti, ho creato un file .php :
    Codice PHP:
    <?php
    error_reporting
    (0);
    define('IN_FILE',1); //Controllo Sicurezza
    define('MD5_SALT','SADS6,Iè[7fui]{+*%&s65');//x md5()
    define('BLOW_KEY','JH75hf&h£=[}@à+-GHF64');//x blowfish
    define('SCRIPT_VERSION', '1.0.0');
    ?>
    ho quindi inserito all'inizio questa linea di codice in ogni file x l'include:
    Codice PHP:
    if (!defined('IN_FILE')) {header("HTTP/1.0 404 Not Found");exit();}
    ho rinominato i file tutti con estensione .php

    pensi sia meglio definire anche una classe?

    Ultima modifica di EuroSalute : 20-02-2011 alle ore 16.31.35 Motivo: ..info
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

  20. #50
    Guest

    Predefinito

    Allora...
    --------------------------
    error_reporting(0);
    quando si è in fase di sviluppo non ci vuole (neanche in fase di produzione... ma il discorso si complica...)

    Al contrario dato che stai in fase di sviluppo ti interessa sapere TUTTI i problemi del tuo script. Quindi:
    error_reporting(E_ALL);

    ----------------------------

    La tecnica utilizzata per impedire accesso diretto al file con:
    Codice PHP:
    if (!defined('IN_FILE')) {header("HTTP/1.0 404 Not Found");exit();}
    è usata da diversi programmatori... ma a me non piace. Io preferisco fare tramite .htaccess un redirect 403; e nella pagina che richiede assolutamente il file di config.php faccio una inclusione con require_once(); (se il file non lo trova va in fatal error... e in caso di seconda inclusione viene ignorata)

    -------------------------

    Lo sleep() presente nei vari esempi di php.net con flock() è semplicemente per fare un test della funzione flock()... Infatti con lo sleep lo script si "ferma" per un tot di secondi rimanendo l'handle aperto... in modo da poter simulare una seconda richiesta in quei secondi e testare l'effettivo lock del file...

    Nell'esempio riportato in questo commento è molto chiaro l'intento:
    http://www.php.net/manual/en/function.flock.php#95257
    Se ci fai caso crea due file: il primo "1st script" script con lo sleep(10); mentre il secondo "2nd script" senza... in sostanza lancia il primo script e subito dopo (entro i 10 secondi) lancia in un altra finestra il secondo script... se il secondo non và flock() funziona.

    Non volgio diventare noioso (sono certo che mi odi...)... fai come in questo esempio (sempre copia e incolla da php.net):
    http://www.php.net/manual/en/function.flock.php#90547

    ------------------------------
    Bhè creare una classe è sempre meglio... ma anche mooolto più complesso (anche io ho ancora difficoltà...)
    Ultima modifica di miniscript : 20-02-2011 alle ore 23.15.18

  21. #51
    L'avatar di EuroSalute
    EuroSalute non è connesso AlterVistiano
    Data registrazione
    12-05-2003
    Messaggi
    969

    Predefinito

    error_reporting(0) l'ho inserito come sicurezza, ovviamente in fase di test no...

    per if (!defined('IN_FILE')) ... non tutti hanno la possibilità di modificare l'.htaccess, dipende dal tipo di hosting, ...come effettui questo redirect, puoi spiegarlo?

    per flock() ho fatto alcuni test....inserendo sleep() e LOCK_NB, comunque ho escluso sleep() e flock($fp, LOCK_UN)....in ogni caso fclose() sblocca il file.

    puoi darmi ancora qualche consiglio per la funzione read_utenti(), il codice:
    Codice PHP:
    <?php
    function read_utenti($command,$user,$email,$ip,$pw)
    {
    $file="utenti.php";
    if (
    file_exists($file) AND is_readable($file) AND is_writable($file)) {
    if (
    $command=="reset_password" && !empty($email) && !empty($ip)) $fp = fopen($file, 'r+');

    $lines = file($file);
    unset(
    $lines[0]); //escludo <?php header ...
    sort($lines);

    if (
    $command=="verify_user" && !empty($user) && !empty($email) && !empty($ip)){//verifica username/email/ip se già presente
    $user = PMA_blowfish_encrypt($user, BLOW_KEY);
    $email = PMA_blowfish_encrypt($email, BLOW_KEY);
    $ip = PMA_blowfish_encrypt($ip, BLOW_KEY);

    foreach(
    $lines as $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address)=explode(',', trim($valore));
    if (
    trim($user_name) == $user) return false;
    if (
    trim($email_address) == $email) return false;
    if (
    trim($ip_address) == $ip) return false;
    }
    //foreach
    return true;

    }else if (
    $command=="log_in" && !empty($user) && !empty($pw) && !empty($ip)){//login
    $user = PMA_blowfish_encrypt($user, BLOW_KEY);
    $pw_md5 = md5($pw.MD5_SALT);

    foreach(
    $lines as $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address,$data_reg)=explode(',', trim($valore));

    if (
    trim($user_name)==$user && trim($pass_word)==$pw_md5) {
    $email = PMA_blowfish_decrypt(trim($email_address), BLOW_KEY);
    $user = PMA_blowfish_decrypt(trim($user_name), BLOW_KEY);
    $data = PMA_blowfish_decrypt(trim($data_reg), BLOW_KEY);

    if (!
    send_mail("Accesso Effettuato !",$user,$pw,$email,$ip,$data)) return false;

    return
    true;
    }

    }
    //foreach
    return false;

    }else if (
    $command=="reset_password" && !empty($email) && !empty($ip)){//reset password casuale
    $email = PMA_blowfish_encrypt($email, BLOW_KEY);

    foreach(
    $lines as $line_num => $valore) {
    list(
    $user_name,$pass_word,$email_address,$ip_address,$data_reg)=explode(',', trim($valore));

    if (
    trim($email_address) == $email) {
    $pw=passwdGen();
    $email = PMA_blowfish_decrypt(trim($email_address), BLOW_KEY);
    $user = PMA_blowfish_decrypt(trim($user_name), BLOW_KEY);
    //$ip = PMA_blowfish_decrypt(trim($ip_address), BLOW_KEY);
    $data = PMA_blowfish_decrypt(trim($data_reg), BLOW_KEY);

    //invio email con la nuova password:
    if (send_mail("Reset Password !",$user,$pw,$email,$ip,$data)) $send_mail=true;
    else
    $send_mail=false;

    $pw = md5($pw.MD5_SALT);

    $lines[$line_num]=trim($user_name).",".$pw.",".trim($email_address).",".trim($ip_address).",".trim($data_reg)."\n";

    if (
    flock($fp, LOCK_EX | LOCK_NB)){
    if (!
    file_put_contents($file,'<?php header("HTTP/1.0 404 Not Found");die();?>'."\n".implode('', $lines)."") OR $send_mail==false) {
    fclose($fp);
    return
    false;
    }
    //sleep(5);
    //flock($fp, LOCK_UN);
    }else return false;

    fclose($fp);
    return
    true;

    }else return
    false;//email non trovata

    }//foreach

    }else return $lines;

    } else return
    "<p>Il File non è stato creato!";//false
    }
    ?>
    provo anche a costruire una classe...

    ciao
    Ultima modifica di EuroSalute : 21-02-2011 alle ore 15.59.01 Motivo: codice tra i tag php
    LOTTO MATEMATICO-SCENTIFICO che FUNZIONA:
    Scripts di Calcolo Automatico Metodologie http://eurosalute.altervista.org

    VINCI OGNI SETTIMANA CON IL NUOVO METODO 5
    FAI IL TEST CON L'ANALISI VINCITE

Pagina 2 di 2 PrimoPrimo 12

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •