Keresés

Keresendő kifejezés:

Toplista

Toplista
  • betöltés...

Segítség!

Ahhoz, hogy mások kérdéseit és válaszait megtekinthesd, nem kell beregisztrálnod, azonban saját kérdés kiírásához ez szükséges!

Tokenes azonosítás SMTP szerverrel

41
Sziasztok.
Pár napja gondolkodom, hogyan oldjam meg a regisztrációs megerősítést a weboldalamon.
A b) megoldás meg is van, ami annyit csinál, hogy generál egy tokent az adatbázisban, ami felhasználóhoz van kötve, majd ezt egy formban meg kell adni, amit regisztrációkor kiküld az SMTP szerverem, és ekkor egy update történik, ami átírja az active táblát 0-ról 1-re adatbázisba.

Ezt persze ellenőrzöm bejelentkezésnél, hogy valóban annyi-e az a tábla a felhasználóknál.

if($function == 'login') {
$username = $conn->real_escape_string($_POST['username']);
$password = $conn->real_escape_string($_POST['password']);

$check = $conn->query("SELECT * FROM auth WHERE id='".$row['id']."'");
$fetch = $check->fetch_assoc();

if(!empty($username) AND !empty($password)) {
if($fetch['active'] == 1) {
$query = $conn->query("SELECT * FROM users WHERE username='$username' AND password='".hash("SHA256",md5($password))."'");
$row = $query->fetch_assoc();

$check = $conn->query("SELECT * FROM auth WHERE user='$username'");
$fetch = $check->fetch_assoc();

if($query->num_rows > 0) {
$code = generateRandomString(rand(5,10));

$query = $conn->query("INSERT INTO sessions (code, created, user, ip)
VALUES ('$code', NOW(), '".$row['id']."', '".$_SERVER['REMOTE_ADDR']."');");
$query = $conn->query("INSERT INTO logindata (user, ip)
VALUES ('".$row['id']."', '".$_SERVER['REMOTE_ADDR']."');");
$conn->query("UPDATE users SET ip='".$_SERVER['REMOTE_ADDR']."' WHERE id='".$row['id']."'");

setcookie("elso_session", $code, time() + (86400 * 14), "/");

echo json_encode(array('success' => true, 'msg' => 'Sikeres bejelentkezés!'));
} else {
echo json_encode(array("msg" => "Hibás felhasználónév vagy jelszó!"));
}
} else {
echo json_encode(array("msg" => "Minden mezőt ki kell tölteni!"));
}
} else {
echo json_encode(array("msg" => "Nem erősítetted meg a felhasználód!"));
}
}

A megerősítés egy külön oldalon van, ahol ajax továbbítja a dolgokat, és ha egyezik a token, amit egy generateRandomString generál, akkor átírja active 1-re a felhasználók táblában a felhasználót.

Viszont az a kérdés, hogy ez mennyire biztonságos?
A másik megoldás az lenne, hogy egy linket küldök ki emailben amit ha megnyit, engedélyezve lesz a felhasználója.
Ezt hogyan kell megoldani? Sosem foglalkoztam még vele.
Előre is köszönöm.

(sulis dolgozat miatt picit sürgős lenne..)
Jelenleg 1 felhasználó nézi ezt a kérdést.
0
Középiskola / Informatika

Válaszok

2
Szia

Valószínűleg a kód megvalósításban nem tudok segíteni, de azért úgy érzem, hogy az elméleti részhez hozzá tudok szólni.
A kiküldök egy kódot és azt beírja a felhasználó megoldás egy járható út, bizonyos oldalak esetében ez egy ma is használt megoldás.

Személy szerint a rákattint egy linkre és aktiválódik a fiók megoldást támogatnám. Nekem ASP.NET-ben van jártasságom, de valószínűsítem, hogy más rendszerekben is hasonló a megvalósítás.
Úgy működik, hogy a link gyakorlatilag egy kérés a backend felé, és query paraméterként tartalmazza a felhasználó azonosítóját és egy tokent. Erre hozok neked kicsit rövidebbre szabott példa linket:
https://valami.hu/ConfirmEmail?userId=6ffa8ab5&code=Q2ZESjhMRTd6VVA5bG14THJDeTNYU1FpWlB2bTJWQ

Tehát lényegében van egy olyan endpoint, ami azonosítót és tokent vár, majd az érkezett adatok alapján aktiválja a fiókot.
És bár tényleg nem az a technológia, amit te használsz, de hátha kis segítséget tud adni neked a megvalósításban az alábbi link:
https://docs.microsoft.com/en-us/aspnet/identity/overview/features-api/account-confirmation-and-password-recovery-with-aspnet-identity
0

Köszi. Akkor ezek szerint ide framework is kelleni fog, mert PHP-ban nem tudom lestreamelni azt, hogy valóban meg-e lett nyitva a link.
Megpróbálom nodejsben vagy vuejs-ben megírni. Mindenképp vagy php vagy javascript frameworköt fogok használni.
JS frameworkben úgy valahogy oldom meg, ahogy írtad, köszönöm szépen.
A kód websocketen keresztül fogja küldeni és fogadni a requesteket, itt küldöm át a tokent is.
1