Creare password unica (era: come fanno??)

the_boss

Utente Attivo
21 Feb 2010
53
0
0
come fanno a fare questa cosa??
venite qui http://pikapuz.altervista.org/
poi entrate con
nome: theboss
password: XTEIFPBC
tanto mi sono iscritto solo per riuscire a imparare il codice..
cmq le mie 2 domande sono:
1) come fanno a mettere nell'immagine le scritte con link credo sia php (nn è fatto con area shape.. o almeno non credo..)
2) quando mi sono iscritto mi hanno inviato un e - mail con la password...
come fanno a formulare una password CHE NON ESISTA GIA??
 
Le scritte con link sono ottenute (probabilmente) usando le map sulle immagini di HTML. Praticamente tu puoi linkare a determinate coordinate dell'immagine una determinata pagina. Non le ho mai usate quindi non ti so spiegare bene come funzionano, cerca qualche articolo sul Web.

Riguardo la password unica, non c'è bisogno di controllare che non esista già, se usi una ragionevole combinazione di caratteri. Prova con questa funzione (creata al volo):
PHP:
<?php
// genera una password alfanumerica
function create_password()
{
	// caratteri disponibili
	$chars = 'A B C D E F G H I J K L M N O P Q R S T U W X Y Z a b c d e f g h i j k l m n o p q r s t u w x y z 1 2 3 4 5 6 7 8 9 0';
	$chars = explode(' ', $chars);

	// variabile della password
	$password = '';

	// crea la password
	for($i = 0; $i < 8; $i++)
		$password .= $chars[rand(0, count($chars) - 1)];

	// restituisce la password
	return $password;
}
?>
 
e come faccio a usarla??

io sto facendo il codice:
Codice:
$nome=$_POST['nome']
$mail=$_POST['mail']
function create_password() 
{ 
    // caratteri disponibili 
    $chars = 'A B C D E F G H I J K L M N O P Q R S T U W X Y Z a b c d e f g h i j k l m n o p q r s t u w x y z 1 2 3 4 5 6 7 8 9 0'; 
    $chars = explode(' ', $chars); 

    // variabile della password 
    $password = ''; 

    // crea la password 
    for($i = 0; $i < 8; $i++) 
        $password .= $chars[rand(0, count($chars) - 1)]; 

    // restituisce la password 
    return $password; 
} 
$oggetto="Iscrizione al GDR Elettric Fight";
$messaggio="Ti sei iscritto a Elettric Fight con il nome di:".$nome."<br>La tua password è:
scrivo la tua password è:".$password o cosa??
 
per evitare le pass doppie basterebbe salvarle in un db e confrontare la nuova con quelle che esitono già
 
Ecco come hanno fatto!

1) come fanno a mettere nell'immagine le scritte con link credo sia php (nn è fatto con area shape.. o almeno non credo..)

Ho guardato il codice di cui parli.

Non centra php: si tratta di puro html!
E' ancora più interessante!

La immagine è in realtà lo sfondo di una tabella html: background-image: url(img/mappe/kanto.jpg);

Sopra a questo, con un certosino lavoro di "spacers" sono stati inseriti dei comuni link con style definito.
Una cosa un po'folle insomma, ma funziona...
 
ok

ma non mi serve quello tanto la pass la cambiano subito...
l'importante invece, è cosa scrivo per usare la funzione..
 
ho guardato il codice di cui parli.

Non centra php: Si tratta di puro html!
E' ancora più interessante!

La immagine è in realtà lo sfondo di una tabella html: Background-image: Url(img/mappe/kanto.jpg);

sopra a questo, con un certosino lavoro di "spacers" sono stati inseriti dei comuni link con style definito.
Una cosa un po'folle insomma, ma funziona...

grazieeeeee
 
ciao
come ha detto eliox per essere sicuri che la password non esista deve essese messa in un db
basta modificare lo script di alessandro nella seguente maniera
PHP:
<?php
//connessione al database, eccetera.....
function create_password() 
{ 
    // caratteri disponibili 
    $chars = 'A B C D E F G H I J K L M N O P Q R S T U W X Y Z a b c d e f g h i j k l m n o p q r s t u w x y z 1 2 3 4 5 6 7 8 9 0'; 
    $chars = explode(' ', $chars); 
    // crea la password verificando che non esista, anche se lr probasbilità sono minime
    while($esiste > 0;){//oppure usare do while e non serve mettere $esiste a > di 0
		// variabile della password 
		$password = '';
		//e stabilisco quanto deve essere lunga
		$lunghezza=8;
		for($i = 0; $i < $lunghezza; $i++){
        	$password .= $chars[rand(0, count($chars) - 1)]; 
		}//fine genera pass
		//verifica se la pass esiste
		$query=mysql_query("SELECT pass FROM tabella_pass WHERE pass='$password'");
		$esiste=mysql_num_rows($query);//se non esiste == 0
		if($esiste == 0){ break; }//esco dal while
	}//fine while, esce se la pass non esiste
    return $password; //ritorno la pass
} //fine function
} 
$oggetto="Iscrizione al GDR Elettric Fight";
$messaggio="Ti sei iscritto a Elettric Fight con il nome di: ".$nome."<br>La tua password è: ".create_password();
//però conviene anche salvarla
?>
 
ok

ok finora tutto okay....
ma arrivo ad un altro problema....
io ogni utente che si iscrive in quel "programma/gioco" che sto facendo, gli invio una mail e lo salvo in un file txt in questo modo
$file=fopen(nomi ecc...
fwrite($file,$nome."°°°");
fclose ecc..
$pass=fopen(lepass) ecc..
fwrite($pass,$password."***");
fclose...
poi faccio:
$apripass=fopen(lepass ecc...)
$tuttelepass=fread($apripass,999999999999999)//leggotutto...
$ognipass=explode("***",$tuttelepass);
fclose ecc....
lo stesso per i nomi...
e il resto lo so fare tranne una cosa...
l'utente non deve riuscire ad entrare nel suo account finchè non è attivato... e si attiva solo dalla mail con un link ogni volta diverso...
tipo come pikapuz di prima che ogni città è nello stesso link con qualcosa in piu...
tipo il link dovrebbe essere:
se il suo nome è mike...
------.altervista.org/gdr/index.php?activate=mike1287hyfe
ho sottolineato per farvi vedere...
c'è scritto mike, che è il nome.. e il resto non è la pass, ma è un codice che deve essere sempre diverso per ogni utente...
senò ogni utente, va apposta al link ?activate=suo nome per attivarsi senza mail...
se avete altri metodi ditemelo.. grazie!
 
Io uso questo sistema. Alla registrazione salvo nel database (nel tuo caso un file di testo) il codice di conferma (univoco!) e imposto il campo status a 0. A questo punto invio all'utente una e-mail con un link di questo tipo: http://www.miosito.com/activate.php?code=[CODICE]. Poi, nella pagina activate.php, eseguo una query di questo tipo:
Codice:
UPDATE users SET status='1' WHERE code='[CODICE]'
Capito?

P.S.: Visto che salvi i dati in un file di testo, hai impedito l'accesso al file agli utenti comuni tramite .htaccess, vero?
 
grazie

grazie, comunque non ho capito bene...
p.s. no, non sono capace di vietare l'accesso... ora faccio una piccola ricerca....
in pratica io inserisco il link con il codice univoco...
poi da li metto lo status a 1.. e la connessione la faccio con if status=1;
però se io voglio creare la variabile codice, deve essere un array, dato che ci sono molti utenti...
ecco io lo mando al link...
ad es. attivazione.php?codice=caparezza (XD)...
come faccio a dire al programma che quel codice equivale allo status di quell'account??
cioè c'è una funzione che cerca nell'array una certa parola??
se sì, basterebbe riuscire a prendere tutto quel che c'è dopo l'uguale, cercarlo nell'array codice, trovare che numero è, e salvarlo nella variabile $t... poi faccio $status[$t]=1.... e cosi ho sistemato il suo status...
poi nella connessione...
devo usare ancora quello della ricerca per trovare il nome, trovare che numero è, salvarlo in $r, vedere se status[$r] e 1... se si si connette senò no..
p.s. come faccio a vietare l'accesso???
p.s.2 e a vietare l'accesso alle persone che non sono connesse??
forse sono io che non ho capito bene il tuo meccanismo... spiegamelo meglio.. grz
 
Mi sembra che tu non abbia proprio capito bene come funziona PHP. Una variabile viene distrutta appena termina l'esecuzione dello script, mentre tu hai bisogno di attivare l'utente permanentemente. Ti ho detto che per ogni utente salvi nel file di testo anche il suo codice. Poi cerchi a quale utente corrisponde il codice inserito, e modifichi il file di testo affinché lo status dell'utente sia 1, capito?
 
è una cosa un po' impossibile...

è una cosa un po' impossibile...
xkè, se lo salvo con il nome...
1) non riesco a "cercare" la variabile... tipo
se nel file di testo c'è:
marco-pinkopallino-0
pinkopallino è il codice e 0 è lo status...
io, mettendo il link a
----.altervista.org/attivazione.php?codice=pinkopallino
1. non riesco a trovare quel ke c'è dopo uguale...
2. anche se lo trovo non posso "cercare" fra tutto il testo, il codice "pinkopallino" per trovare poi lo status......
3. anche se lo trovassi non so a che byte è il codice...
cmq mi sono confuso, scusa, non serve attivarlo dato che la pass. si trova nella mail...
però nella connessione come faccio??
devo riuscire a mettere un form ke...
al click si va al link connesso.php..
lì, deve cercare in tutto l'array "ogninome" quello che ha scritto lui...
da esso devo sapere che numero dell'array è...
tipo ogninome[30]....
poi devo riuscire a trovare il numero 30 per vedere se la pass che ha inserito, è uguale alla pass[30]..
capito??
come faccio??
p.s. ho fatto la ricerca su quel codice...
trovo tutte altre cose...
 
fa niente

fa niente ho trovato un altro metodo funzionante ^^ si tratta che alla connessione deve anche scrivere il numero del giocatore che ha, cosi faccio $nome[$numerodelgiocatorechehascritto] ecc...
però ho trovato un altra difficoltà.
io ho scirtto (guardate nelle ultime 4 righe)
Codice:
<?php
$nome=$_POST['nome'];
$mail=$_POST['mail'];
// genera una password alfanumerica 
function create_password() 
{ 
    // caratteri disponibili 
    $chars = 'A B C D E F G H I J K L M N O P Q R S T U W X Y Z a b c d e f g h i j k l m n o p q r s t u w x y z 1 2 3 4 5 6 7 8 9 0'; 
    $chars = explode(' ', $chars); 

    // variabile della password 
    $password = ''; 

    // crea la password 
    for($i = 0; $i < 8; $i++) 
        $password .= $chars[rand(0, count($chars) - 1)]; 

    // restituisce la password 
    return $password; 
} 
$nomi=fopen("nomi.txt",'a');
fwrite($nomi,$nome."°°°");
fclose($nomi);
$nomi=fopen("nomi.txt",'r+');
$tuttinomi= file_get_contents("nomi.txt");
$arnomi=explode("°°°",$tuttinomi);
$ngio=count($arnomi);
$oggetto="Iscrizione al GDR Elettric Fight";
$messaggio="Ti sei iscritto a Elettric Fight con il nome di:".$nome.". La tua password è: ".create_password().". E sei il giocatore numero: ".$ngio;
$intestazioni="From:[email protected]";
mail($mail, $oggetto, $messaggio, $intestazioni);
$lepass=fopen("passpasspas.txt",'a');
fwrite($lepass,"***".$password);
fclose($lepass);
?>

c'è scritto che nel file txt scrive ***password...
però mi scrive solamente *** non so perchè...
sapete perchè??
 
$password non è una variabile globale, ma viene restituita. Ti consiglio di ripassare le basi di PHP. Ecco il tuo script con qualche miglioria:
PHP:
<?php
// genera una password alfanumerica 
function create_password() 
{ 
    // caratteri disponibili 
    $chars = 'A B C D E F G H I J K L M N O P Q R S T U W X Y Z a b c d e f g h i j k l m n o p q r s t u w x y z 1 2 3 4 5 6 7 8 9 0'; 
    $chars = explode(' ', $chars); 

    // variabile della password 
    $password = ''; 

    // crea la password 
    for($i = 0; $i < 8; $i++) 
        $password .= $chars[rand(0, count($chars) - 1)]; 

    // restituisce la password 
    return $password; 
}

// recupera i dati inseriti dall'utente
$nome = isset($_POST['nome']) ? trim($_POST['nome']) : '';
$mail = isset($_POST['mail']) ? trim($_POST['mail']) : '';

// apre il file dei nomi
$nomi = fopen('nomi.tx', 'a');

// scrive il nuovo nome nel file
fwrite($nomi, "{$nome}°°°");

// chiude il file dei nomi
fclose($nomi);

// recupera tutti i nomi presenti
$tuttinomi = file_get_contents('nomi.txt');

// suddivide il contenuto del file
$arnomi = explode('°°°', $tuttinomi);

// ottiene il numero di nomi
$ngio = count($arnomi);

// recupera la passowrd dell'utente
$password = create_password();

// genera l'oggetto dell'e-mail
$oggetto = 'Iscrizione al GDR Elettric Fight';

// genera il messaggio dell'e-mail
$messaggio = "Ti sei iscritto a Elettric Fight con il nome di: {$nome}. La tua password è: {$password}. Sei il giocatore numero: {$ngio}.";

// genera le intestazioni dell'e-amil
$intestazioni = 'From:[email protected]';

// invia l'e-mail all'utente
mail($mail, $oggetto, $messaggio, $intestazioni);

// apre il file delle password
$lepass = fopen('passpasspas.txt', 'a');

// scrive la nuova password nel file
fwrite($lepass, "***{$password}");

// chiude il file delle password
fclose($lepass);
?>
Comunque io ti consiglio di inserire tutte le funzioni in un file esterno che poi includerai quando ti serviranno. In questa maniera non ti servirà riscriverle ogni volta. Poi ho un'altra perplessità: ma tu inserisci i dati nel file senza neanche fare uno straccio di controllo? E se l'utente inserisce una password come °°° sei fregato, lo sai? :D
Usa i file XML che sono più sicuri!

Per quanto riguarda la protezione, metti tutti i file contenenti informazioni delicate in una cartella, chiamate per esempio private, e poi al suo interno metti un .htaccess così strutturato:
Codice:
Order deny,allow
Deny from all
Allow from 127.0.0.1
Così nessuno potrà leggere quei file al di fuori del server!
 
okok

cmq non so come si usano i file xml...
ora faccio qualche ricerca...
quanto riguarda il htaccess ho gia fatto delle ricerche ma ho trovato tutt'altro...
 
Calcola comunque che non è per niente facile lavorare con i file XML. Ti spiego: ci sono diverse librerie che consentono di leggere/scrivere in questo formato, ma quasi tutte presentano qualche problema. SimpleXML non supporta CDATA (per sviluppare un software basato su questa libreria ho dovuto scrivere manualmente il codice XML), DOM non è semplice da utilizzare quanto il primo, e così via. Però se vuoi avventurarti per questo tortuoso sentiero benvenuto, non sei l'unico! :D
 

Discussioni simili