Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent
Viste le numerose critiche al mio precedente sistema di login che limitava le registrazioni ad una sola macchina ho deciso di modificarlo, e ,visto che c'ero ho aggiunto due simpatiche cosette:
Ho aggiunto i tipi di utenti, così potrete dividere gli utenti ad esempio (bronzo,argento ed oro) e in base al loro gruppo rendere loro disponibili più o meno funzioni dei vostri programmi.
Poi ho migliorato la sicurezza, bloccando l'accesso al modulo php da browser, che altrimenti poteva essere utilizzato per creare accout personalizzati, così ho creato un filtro basato sull'useragent, che permette di utilizzare la registrazione solo su richiesta del programma, che appunto, utilizza un useragent personalizzato (che vi consiglio di cambiare).
Questa sarà una guida veloce senza troppe spiegazioni, che comunque potrete trovare nella guida precedente.
Impostare il database
Creiamo le tavole nel database sql, eseguendo la sottostante query attraverso il phpmyadmin:
Un po' di PHP
Registrazione
Creiamo il file per la registrazione che chiameremo register.php e inseriamo il seguente codice, modificando le stringhe in rosso:
Login
Successivamente creiamo anche il modulo per il login, che chiameremo appunto login.php
Un po' di .net!
Creiamo un modulo che conterrà la funzione per criptare le strighe in MD5 e le informazioni sull'utente loggato e inseriamo:
(Ho diviso in 2 moduli per comodità e ordine)
Registrazione
Creiamo una nuova form con due textbox, la prima contente l'username, la seconda contente la password e un bottone, nel quale inseriremo:
Login
Come prima:
Creiamo una nuova form con due textbox, la prima contente l'username, la seconda contente la password e un bottone, nel quale inseriremo:
In caso di login potrete usare nel vostro programma le informazioni memorizzate nelle variabili User_Name o User_Type che si commentano da sole come vorrete. ;)
Viste le numerose critiche al mio precedente sistema di login che limitava le registrazioni ad una sola macchina ho deciso di modificarlo, e ,visto che c'ero ho aggiunto due simpatiche cosette:
Ho aggiunto i tipi di utenti, così potrete dividere gli utenti ad esempio (bronzo,argento ed oro) e in base al loro gruppo rendere loro disponibili più o meno funzioni dei vostri programmi.
Poi ho migliorato la sicurezza, bloccando l'accesso al modulo php da browser, che altrimenti poteva essere utilizzato per creare accout personalizzati, così ho creato un filtro basato sull'useragent, che permette di utilizzare la registrazione solo su richiesta del programma, che appunto, utilizza un useragent personalizzato (che vi consiglio di cambiare).
Questa sarà una guida veloce senza troppe spiegazioni, che comunque potrete trovare nella guida precedente.
Impostare il database
Creiamo le tavole nel database sql, eseguendo la sottostante query attraverso il phpmyadmin:
-- phpMyAdmin SQL Dump
-- phpMyAdmin
-- --
CREATE TABLE `login2` (
`username` text collate latin1_german1_ci NOT NULL,
`password` text collate latin1_german1_ci NOT NULL,
`usertype` text collate latin1_german1_ci NOT NULL,
FULLTEXT KEY `password` (`password`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;
Un po' di PHP
Registrazione
Creiamo il file per la registrazione che chiameremo register.php e inseriamo il seguente codice, modificando le stringhe in rosso:
<?php
$dbhost = "localhost";
$dbname = "my_nomesito";
$dbuser = "username";
$dbpass = "password";
$user = addslashes($_POST["username"]);
$pass = addslashes($_POST["password"]);
$usertype = addslashes($_POST["usertype"]);
function agent($browser) {
$useragent = $_SERVER['HTTP_USER_AGENT'];
return strstr($useragent,$browser);
}
if(agent("LoginClient") != FALSE) {
mysql_connect($dbhost, $dbuser, $dbpass)or die("3");
$verb = mysql_select_db($dbname);
if ($verb)
{
if (!empty($user) and !empty($pass) and !empty($usertype))
{
if ( mysql_num_rows( mysql_query( "SELECT * FROM login2 WHERE username='".$user."'" ) ) == 0 ) {
$sqlquery = "INSERT INTO login2 (username, password, usertype) VALUES('$user','$pass','$usertype')";
$results = mysql_query($sqlquery);
echo("1");
}else{
echo("2");
}
}else{
echo("0");
}
}
mysql_close();
}
else {echo("Bad UserAgent");}
?>
Login
Successivamente creiamo anche il modulo per il login, che chiameremo appunto login.php
<?php
$dbhost = "localhost";
$dbname = "my_nomesito";
$dbuser = "username";
$dbpass = "password";
$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 login2 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;
$usertype = $row->usertype;
if ($passwort == $pass)
{
echo("1" .$usertype);
exit();
}
else
{
echo("2");
exit();
}
}
}
mysql_close();
?>
Un po' di .net!
Creiamo un modulo che conterrà la funzione per criptare le strighe in MD5 e le informazioni sull'utente loggato e inseriamo:
(Ho diviso in 2 moduli per comodità e ordine)
Imports System.IO
Imports System.Security.Cryptography
Imports System.Management
Imports System.Text
Module Md5Encode
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
End Module
Module UserInfo
Public User_Name As String
Public User_Password As String
Public User_Type As String
End Module
Registrazione
Creiamo una nuova form con due textbox, la prima contente l'username, la seconda contente la password e un bottone, nel quale inseriremo:
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.UserAgent = "LoginClient"
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
Dim Post As String = ("username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text) & "&usertype=" & "GruppoUtente")
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.ToString.Contains("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
Login
Come prima:
Creiamo una nuova form con due textbox, la prima contente l'username, la seconda contente la password e un bottone, nel quale inseriremo:
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))
Dim R As String
If response.Length > 1 Then
R = response.Replace(response.Substring(1), "")
Else
R = response
End If
Select Case R
Case 0
MsgBox("L'utente non esiste", MsgBoxStyle.Exclamation)
Case 1
MsgBox("Login effettuato con successo", MsgBoxStyle.Information) ' LOGIN EFFETTUATO
User_Type = response.Substring(1)
User_Password = TextBox2.Text
User_Name = TextBox1.Text
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
In caso di login potrete usare nel vostro programma le informazioni memorizzate nelle variabili User_Name o User_Type che si commentano da sole come vorrete. ;)