Visto le numerose richieste di una guida per realizzare un sistema di login sicuro ( http://www.sciax2.it/forum/visual-basic/vbulletin-net-secure-login-system-520690.html ) ho deciso di scrivere una guida, abbastanza completa su come realizzarlo.
NB: I codici in rosso sono quelli da modificare!
Registrazione
Iniziamo creandoci uno spazio web su
Creiamo il file register.php e inseriamo:
Funzionamento(tenete conto che di php capisco ben poco :P ):
Inizialmente vanno inseriti manualmente i dati del nostro spazio web.
Lasciamo localhost com'è ,sostituiamo dbname con il nome del nostro database preceduto da my_ , se ad esempio abbiamo il sito ciao.altervista.org, dovremo sostituirlo con my_ciao.
Sostituiamo username e password con le nostre credenziali, per intenderci quelle che mettete su filezilla o al momento del login su altervista.
A questo punto il file prende le informazioni inviate dal client (Vedremo dopo) che saranno Username, Password e hwid.
Dopo aver verificato che contengano effettivamente qualcosa (che non siano vuote) cerca nel database tramite una query username e password, e, in caso non esistano le inserisce e scrive l'hardware id nel file.
i codici echo("1"); echo("2");... servono come risposta al nostro programma che gli interpreterà.
A questo punto logghiamo su altervista, andiamo su tools->PhpMyadmin (facciamo il login con le stesse credenziali) e premiamo sul 3 bottone in alto a sinistra (quello con scritto sql:
) e inseriamo la seguente query che creerà la table "login" nel nostro database:
Creiamo il programma
HWID
Per prima cosa creeremo il modulo contente le funzioni per "calcolare" l'hardware id, quindi creiamo un nuovo modulo e inseriamo
Importiamo System.Management dai riferimenti
Form di registrazione
Creiamo una form con due textbox (la prima contente l'username la seconda contente la password)
Prima di tutto importiamo!:
Nell'evento load del form calcoliamo l'hardwareId
Successivamente creiamo la funzione per la registrazione
Il programma esegue una richiesta 'post' al nostro modulo php come richiesto da quest'ultimo inserendo come argomenti l'username la password e l'hardwareID, e attende la risposta, la legge e la interpreta.
Ora basterà inserire Register() in un bottone ;)
Login
Come per la registrazione dovremo creare un file php, che chiameremo login.php (Che fantasia!) inserendoci il seguente codice:
Successivamente creiamo la form per i login uguale a quella per la registrazione, con due textbox la prima per l'username la seconda per la password.
Nell'evento load del form calcoliamo l'hardwareId
Successivamente creiamo la funzione per il login:
Che possiamo utilizzare anche sottoforma di funzione se vogliamo un codice più pulito e versatile:
Ora basterà inserire Login () All'interno di un bottone (O dove più vi aggrada).
Per concludere vi basterà caricare un file di testo con nome hwid.txt nella stessa cartella dei moduli .php e avrete concluso, questo file conterrà tutti gli hwid dei vostri utenti.
In conclusione ecco uno zip con tutti i file da caricare e incluso anche il progetto già fatto, ovviamente dovrete modificare tutti con i vostri dati ;)
Garu
NB: I codici in rosso sono quelli da modificare!
Registrazione
Iniziamo creandoci uno spazio web su
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
,o con un qualsiasi servizio che offra hosting ftp e uno (o più) database sql.Creiamo il file register.php e inseriamo:
<?php
// Connection details
$dbhost = "localhost";
$dbname = "dbname"; // Inserire nome database preceduto da my_
$dbuser = "user"; // username
$dbpass = "pass"; // password
$user = addslashes($_POST["username"]);
$pass = addslashes($_POST["password"]);
$hwid = addslashes($_POST["hwid"]);
mysql_connect($dbhost, $dbuser, $dbpass)or die("3");
$verb = mysql_select_db($dbname);
if ($verb)
{
if (!empty($user) and !empty($pass) and !empty($hwid))
{
if ( mysql_num_rows( mysql_query( "SELECT * FROM login WHERE username='".$user."'" ) ) == 0 ) {
$sqlquery = "INSERT INTO login (username, password) VALUES('$user','$pass')";
$results = mysql_query($sqlquery);
$hwidfile = fopen("hwid.txt","a");
fwrite($hwidfile, $hwid."\r\n");
fclose($hwidfile);
echo("1");
}else{
echo("2");
}
}else{
echo("0");
}
}
mysql_close();
?>
Funzionamento(tenete conto che di php capisco ben poco :P ):
Inizialmente vanno inseriti manualmente i dati del nostro spazio web.
Lasciamo localhost com'è ,sostituiamo dbname con il nome del nostro database preceduto da my_ , se ad esempio abbiamo il sito ciao.altervista.org, dovremo sostituirlo con my_ciao.
Sostituiamo username e password con le nostre credenziali, per intenderci quelle che mettete su filezilla o al momento del login su altervista.
A questo punto il file prende le informazioni inviate dal client (Vedremo dopo) che saranno Username, Password e hwid.
Dopo aver verificato che contengano effettivamente qualcosa (che non siano vuote) cerca nel database tramite una query username e password, e, in caso non esistano le inserisce e scrive l'hardware id nel file.
i codici echo("1"); echo("2");... servono come risposta al nostro programma che gli interpreterà.
A questo punto logghiamo su altervista, andiamo su tools->PhpMyadmin (facciamo il login con le stesse credenziali) e premiamo sul 3 bottone in alto a sinistra (quello con scritto sql:
-- phpMyAdmin SQL Dump
--Perfavore, Entra oppure Registrati per vedere i Link!
-- --
CREATE TABLE `login` (
`username` text collate latin1_german1_ci NOT NULL,
`password` text collate latin1_german1_ci NOT NULL,
FULLTEXT KEY `password` (`password`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Creiamo il programma
HWID
Per prima cosa creeremo il modulo contente le funzioni per "calcolare" l'hardware id, quindi creiamo un nuovo modulo e inseriamo
Importiamo System.Management dai riferimenti
Imports System.IO
Imports System.Security.Cryptography
Imports System.Management
Imports System.Text
Module HardwareID
Public myhwid As String
Public Function HwId() As String
Return MD5_Encode(ID)
End Function
Public Function MD5_Encode(ByVal strString As String) As String
Dim MD5 As New MD5CryptoServiceProvider
Dim Data As Byte()
Dim Result As Byte()
Dim Res As String = ""
Dim Tmp As String = ""
Data = Encoding.ASCII.GetBytes(strString)
Result = MD5.ComputeHash(Data)
For i As Integer = 0 To Result.Length - 1
Tmp = Hex(Result(i))
If Len(Tmp) = 1 Then Tmp = "0" & Tmp
Res += Tmp
Next
Return Res.ToLower
End Function
Private Function ID()
Dim out As String = ""
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_Processor")
For Each queryObj As ManagementObject In searcher.Get()
out &= queryObj("ProcessorId").ToString
Next
Catch : End Try
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_VideoController")
For Each queryObj As ManagementObject In searcher.Get()
out &= "-" & queryObj("AdapterRAM").ToString
Next
Catch : End Try
Try
Dim searcher As New ManagementObjectSearcher( _
"root\CIMV2", _
"SELECT * FROM Win32_DiskDrive")
For Each queryObj As ManagementObject In searcher.Get()
out &= "-" & queryObj("Size").ToString
Next
Catch : End Try
Return out
End Function
End Module
Form di registrazione
Creiamo una form con due textbox (la prima contente l'username la seconda contente la password)
Prima di tutto importiamo!:
Imports System.IO
Imports System.Security.Cryptography
Imports System.Management
Imports System.Text
Imports System.Net
Nell'evento load del form calcoliamo l'hardwareId
Private Sub FormRegistrazione_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myhwid = HwId()
End Sub
Successivamente creiamo la funzione per la registrazione
Sub Register()
If TextBox2.Text <> Nothing AndAlso TextBox1.Text <> Nothing Then '
Try
Dim request As HttpWebRequest = CType(WebRequest.Create("http://VOSTROSITO.altervista.org/Login/register.php"), HttpWebRequest)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
Dim Post As String = ("username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text) & "&hwid=" & myhwid)
Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
request.ContentLength = byteArray.Length
Dim DataStream As Stream = request.GetRequestStream()
DataStream.Write(byteArray, 0, byteArray.Length)
DataStream.Close()
Dim Response As HttpWebResponse = request.GetResponse()
DataStream = Response.GetResponseStream()
Dim reader As New StreamReader(DataStream)
Dim ServerResponse As String = reader.ReadToEnd()
reader.Close()
DataStream.Close()
Response.Close()
If ServerResponse = 1 Then
MsgBox("Registrazione avvenuta con successo", MsgBoxStyle.Information)
ElseIf ServerResponse = 0 Then
MsgBox("Nessun dato registrato", MsgBoxStyle.Exclamation)
ElseIf ServerResponse = 2 Then
MsgBox("Nome utente già utilizzato", MsgBoxStyle.Exclamation)
ElseIf ServerResponse = 3 Then
MsgBox("Impossibile connettersi al database", MsgBoxStyle.Critical)
End If
Catch
MsgBox("Impossibile connettersi al server", MsgBoxStyle.Critical)
End Try
Else
MsgBox("Inserire username e/o password per continuare", MsgBoxStyle.Exclamation)
End If
End Sub
Il programma esegue una richiesta 'post' al nostro modulo php come richiesto da quest'ultimo inserendo come argomenti l'username la password e l'hardwareID, e attende la risposta, la legge e la interpreta.
Ora basterà inserire Register() in un bottone ;)
Login
Come per la registrazione dovremo creare un file php, che chiameremo login.php (Che fantasia!) inserendoci il seguente codice:
<?php
/
$dbhost = "localhost";
$dbname = "dbname";
$dbuser = "user";
$dbpass = "pass";
$user = addslashes($_GET['username']);
$pass = addslashes($_GET['password']);
mysql_connect($dbhost, $dbuser, $dbpass)or die("3");
$verb = mysql_select_db($dbname);
if ($verb)
{
$sql = "SELECT * FROM login WHERE username='".$user."'";
$quer = mysql_query($sql) or die("4");
$num = mysql_num_rows($quer);
if ($num == 0)
{
echo("0");
exit();
}
else
{
$row = mysql_fetch_object($quer);
$passwort = $row->password;
if ($passwort == $pass)
{
echo("1");
exit();
}
else
{
echo("2");
exit();
}
}
}
mysql_close();
?>
Successivamente creiamo la form per i login uguale a quella per la registrazione, con due textbox la prima per l'username la seconda per la password.
Nell'evento load del form calcoliamo l'hardwareId
Private Sub FormRegistrazione_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myhwid = HwId()
End Sub
Successivamente creiamo la funzione per il login:
Private Sub Login() '
Try
Dim WC As New Net.WebClient
Dim response As String = WC.DownloadString("http://VOSTROSITO.altervista.org/Login/login.php?username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text))
Select Case response
Case 0
MsgBox("L'utente non esiste", MsgBoxStyle.Exclamation)
Case 1
Dim hwid As String = WC.DownloadString("http://vostrosito.altervista.org/Login/hwid.txt")
If hwid.Contains(myhwid) = True Then
MsgBox("Login effettuato con successo", MsgBoxStyle.Information)
' LOGIN EFFETTUATO
Else
MsgBox("Hwid Errato", MsgBoxStyle.Exclamation)
End If
Case 2
MsgBox("Password Errata", MsgBoxStyle.Exclamation)
Case 3
MsgBox("Impossibile connettersi al database", MsgBoxStyle.Critical)
Case 4
MsgBox("Impossibile trovare tavola mysql", MsgBoxStyle.Critical)
End Select
Catch
MsgBox("Impossibile connettersi al server", MsgBoxStyle.Critical)
End Try
End Sub
Che possiamo utilizzare anche sottoforma di funzione se vogliamo un codice più pulito e versatile:
Private Function Login() As Boolean
Try
Dim WC As New Net.WebClient
Dim response As String = WC.DownloadString("http://projecthosting.altervista.org/Login/login.php?username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text))
Select Case response
Case 0
MsgBox("L'utente non esiste", MsgBoxStyle.Exclamation)
Return False
Case 1
Dim hwid As String = WC.DownloadString("http://projecthosting.altervista.org/Login/hwid.txt")
If hwid.Contains(myhwid) = True Then
MsgBox("Login effettuato con successo", MsgBoxStyle.Information)
Return True
Else
MsgBox("Hwid Errato", MsgBoxStyle.Exclamation)
Return False
End If
Case 2
MsgBox("Password Errata", MsgBoxStyle.Exclamation)
Return False
Case 3
MsgBox("Impossibile connettersi al database", MsgBoxStyle.Critical)
Return False
Case 4
MsgBox("Impossibile trovare tavola mysql", MsgBoxStyle.Critical)
Return False
End Select
Catch
MsgBox("Impossibile connettersi al server", MsgBoxStyle.Critical)
Return False
End Try
End Function
Try
Dim WC As New Net.WebClient
Dim response As String = WC.DownloadString("http://projecthosting.altervista.org/Login/login.php?username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text))
Select Case response
Case 0
MsgBox("L'utente non esiste", MsgBoxStyle.Exclamation)
Return False
Case 1
Dim hwid As String = WC.DownloadString("http://projecthosting.altervista.org/Login/hwid.txt")
If hwid.Contains(myhwid) = True Then
MsgBox("Login effettuato con successo", MsgBoxStyle.Information)
Return True
Else
MsgBox("Hwid Errato", MsgBoxStyle.Exclamation)
Return False
End If
Case 2
MsgBox("Password Errata", MsgBoxStyle.Exclamation)
Return False
Case 3
MsgBox("Impossibile connettersi al database", MsgBoxStyle.Critical)
Return False
Case 4
MsgBox("Impossibile trovare tavola mysql", MsgBoxStyle.Critical)
Return False
End Select
Catch
MsgBox("Impossibile connettersi al server", MsgBoxStyle.Critical)
Return False
End Try
End Function
Ora basterà inserire Login () All'interno di un bottone (O dove più vi aggrada).
Per concludere vi basterà caricare un file di testo con nome hwid.txt nella stessa cartella dei moduli .php e avrete concluso, questo file conterrà tutti gli hwid dei vostri utenti.
In conclusione ecco uno zip con tutti i file da caricare e incluso anche il progetto già fatto, ovviamente dovrete modificare tutti con i vostri dati ;)
Perfavore,
Entra
oppure
Registrati
per vedere i Link!
Garu
Ultima modifica: