• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

Garu

Utente Attivo
Autore del topic
9 Ottobre 2011
412
0
Miglior risposta
0
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:

-- 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. ;)
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

Grande! :emoji_smiley:
Continua Così! ;)

Questa andrebbe in rilievo!
 
Ultima modifica da un moderatore:
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

A me dà errore quando inizio il programma "L'utente non esiste" e quando provo a loggare non non fa niente
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

A me dà errore quando inizio il programma "L'utente non esiste" e quando provo a loggare non non fa niente

Hai creato il database sql con le relative tavole ? hai sostituito i le credenziali di accesso con le tue ? hai modificato il percorso dei file php nel programma ?
Cosa intendi per 'quando inizi il programma' ? un programma non si inizia al limite si avvia, e comunque all'avvio non deve far nulla.
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

@Garu , se per caso sai usare anche Microsoft Access (.mdb) , te ne sarei grado se facessi una Guida su come utilizzare il Database su VB.Net/VB2010 con Access. (Interazione Form/Database Login).
 
Ultima modifica:
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

A me da problemi con le righe del Md5_Encode Dim Post As String = ("username=" & TextBox1.Text & "&password=" & Md5_Encode(TextBox2.Text) & "&usertype=" & "Gruppo")

E:

Dim response As String = WC.DownloadString("http://SITO.altervista.org/Login/login.php?username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text))
Help me please :emoji_slight_smile:
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

A me da problemi con le righe del Md5_Encode Dim Post As String = ("username=" & TextBox1.Text & "&password=" & Md5_Encode(TextBox2.Text) & "&usertype=" & "Gruppo")

E:

Dim response As String = WC.DownloadString("http://SITO.altervista.org/Login/login.php?username=" & TextBox1.Text & "&password=" & MD5_Encode(TextBox2.Text))
Help me please :emoji_slight_smile:
La seconda stringa devi modificarla tu, dove c'è sito.altervista.org metti il tuo indirizzo. Per la prima non so, non ho il codice, ma vorrei comunque sapere il tipo di errore che ti dà.
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

La seconda stringa devi modificarla tu, dove c'è sito.altervista.org metti il tuo indirizzo.
Si, lo so ho censurato xD
Per la prima non so, non ho il codice, ma vorrei comunque sapere il tipo di errore che ti dà.
mijjua.jpg
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

Nel paragrafo "Un po di .net" aggiungi dopo le varie scritte Import.System ecc. Module Md5Encode
 
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

Nel paragrafo "Un po di .net" aggiungi dopo le varie scritte Import.System ecc. Module Md5Encode
C'è di già nel codice Md5Encode :look:

Ok problema risolto, adesso però fa sempre "Impossibile connettersi al database"
 
Ultima modifica:
Riferimento: Vb.net - NEW Secure Login System | No Hwid - UserGroups - Custom UserAgent

hai modificato qualcosa sulle alert?