• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System Logowania z MySql - PHP

VPS Starter Arubacloud
0 głosów
1,047 wizyt
pytanie zadane 5 lipca 2019 w PHP przez Nerez Użytkownik (970 p.)

Po wprowadzeniu byle jakich danych w miejscu "Login" oraz "Hasło" wyświetla się poprawnie zalogowano.

W MySql dodałem odpowiednią tabelkę z danymi "admin", "admin", ale nic to nie zmieniło. Cały czas wyświetla się poprawnie zalogowano, nawet po zostawieniu pól pustych. W miejscu: SELECT * FROM...." zmieniłem nawet zmienne tzn: "SELECT * FROM LOGOWANIE WHERE username = admin and password = admin;"

Nic to nie daje

 

<?php
	$username = $_POST ['username'];
	$password = $_POST ['password'];
	$link = mysqli_connect("sql.nazwa.test.pl", "server_nazwa", "Haslo", "server_nazwa") or die($link);
	
	$username = stripcslashes($username);
	$password = stripcslashes($password);
	$username = mysqli_real_escape_string($link, $username);
	$pass1 = mysqli_real_escape_string($link, $password);
	
	$sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");
	$query = mysqli_query
	$row = mysqli_fetch_array($result);
	if ($row['username'] == $username && $row['password'] == $password ) {
		echo "Poprawnie zalogowano";
	}
	else {
		echo "Blad z logowaniem!";
	}
	
?>

 

HTML: 

<div class="align">
		<div class="card">
			<div class="head">
				<div></div>
				<a id="login" class="selected" href="#login">Login</a>
				<a id="register" href="#register">Register</a>
				<div></div>
			</div>
			<div class="tabs">
				<form action ="process.php" method ="POST">
					<div class="inputs">
						<div class="input">
							<input placeholder="Username" type="text">
							<img src="img/user.svg">
						</div>
						<div class="input">
							<input placeholder="Password" type="password">
							<img src="img/pass.svg">
						</div>
						<label class="checkbox">
							<input type="checkbox">
							<span>Zapamiętaj mnie</span>
						</label>
					</div>
					<button>Login</button>
				</form>
				<form>
					<div class="inputs">
						<div class="input">
							<input placeholder="Email" type="text">
							<img src="img/mail.svg">
						</div>
						<div class="input">
							<input placeholder="Username" type="text">
							<img src="img/user.svg">
						</div>
						<div class="input">
							<input placeholder="Password" type="password">
							<img src="img/pass.svg">
						</div>
					</div>
					<button>Register</button>
				</form>
			</div>
		</div>
	</div>

 

 

Siedzi to na serwerze nazwy.pl, dlatego nic u mnie temu nie przeszkadza. MySql działa na 100%, ponieważ łączyłem się też poprzez Javę.

 

komentarz 5 lipca 2019 przez Velta Maniak (51,890 p.)
  • L12: brakuje średnika, niezrozumiały zapis.
  • Brakuje atrybutu name w kontrolkach formularza.
  • Brakuje szyfrowania hasłą.
komentarz 5 lipca 2019 przez Nerez Użytkownik (970 p.)
1.Zrobione,

2.Zrobione,

3. Do zrobienia :)

4 odpowiedzi

+1 głos
odpowiedź 5 lipca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
$username = $_POST ['username'];
    $password = $_POST ['password'];

Próbujesz tu odczytać wartości z POST, których tam na pewno nie będzie jeśli korzystasz z podanego poniżej formularza, bo nie ma on pól o takich nazwach. 

Przy okazji: hasła nie należy trzymać w bazie jako zwykły tekst. Wartości do bazy nie powinny być też wstawiane w taki sposób, należałoby je zwalidować i użyć bindowania, aby zabezpieczyć się przed atakiem sql injection.

komentarz 5 lipca 2019 przez Nerez Użytkownik (970 p.)
Jak mam to zrobic? Jak pola mam zmienic, przyznam się, że ten system logowania w php jest w 70% z internetu. Nie wiem co z tym Post. A co do zabezpieczen, to SSL cos da?
komentarz 5 lipca 2019 przez Arkadiusz Waluk Ekspert (287,550 p.)
Po prostu musisz nadać odpowiednie nazwy dla inputów. Przy użyciu nazwy z HTML odczytasz przesłaną wartość z tablicy $_POST. Nawet jeśli jest z internetu, to nie zwalnia z samodzielnego analizowania i znajomości chociaż podstaw, bo inaczej będzie ciężko coś zrobić. SSL spowoduje zaszyfrowanie komunikacji, aby nikt po drodze nie mógł jej podejrzeć. To też jest ważne, ale nadal atakujący będzie mógł zastosować atak sql injection i zmanipulować zapytanie (celem np. wyciągnięcia innych danych albo pousuwania czegoś) czy wprowadzić tam dane, które wyświetlone gdzieś wykonają określony kod i będzie atak XSS.
0 głosów
odpowiedź 5 lipca 2019 przez Job102 Bywalec (2,050 p.)

Witam,

chodzi o to, że musisz dodać nazwy "username" i "password", bo PHP nie wie do czego ma się odnieść.

W <input> "Username" dodaj 'name="username"', a w <input> "Password" 'name="password"'.

<form action ="process.php" method ="POST">
 <div class="inputs">
  <div class="input">
   <input name="username" placeholder="Username" type="text">
   <img src="img/user.svg">
  </div>
  <div class="input">
   <input name="password" placeholder="Password" type="password">
   <img src="img/pass.svg">
  </div>
  <label class="checkbox">
   <input type="checkbox">
   <span>Zapamiętaj mnie</span>
  </label>
 </div>
  <button>Login</button>
</form>

Pozdrawiam.

komentarz 5 lipca 2019 przez Nerez Użytkownik (970 p.)
Dalej to samo :/
0 głosów
odpowiedź 5 lipca 2019 przez Job102 Bywalec (2,050 p.)
$link = mysqli_connect("sql.nazwa.test.pl", "server_nazwa", "Haslo", "server_nazwa") or die($link);

Składnia "mysqli_connect":

$link = mysqli_connect("localhost","my_user","my_password","my_db");

czyli, w miejscu:

"localhost" - wpisujesz nazwę serwera

"my_user" - użytkownik

"my_password" - hasło

"my_db" - nazwa bazy danych

Po zalogowaniu do phpMyAdmin będziesz miał wszystkie informacje poza hasłem - hasło jest takie samo jakie ustawiłeś do panelu phpMyAdmin.

$query = mysqli_query

Nie ma zastosowania. Generuje tylko błąd z powodu braku średnika.

$row = mysqli_fetch_array($result);

$result zmień na $sql, gdyż to $sql pobiera wyniki z tablicy. Nie masz nigdzie zdefiniowanego $result.

$sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");

Pamiętaj że "logowanie" to nazwa Twojej bazy danych, jesli masz inną nazwę - zmień ją w tym wierszu.

Pełny kod:

<?php
    $username = $_POST ['username'];
    $password = $_POST ['password'];
    $link = mysqli_connect(/*"localhost", "my_user", "my_password", "my_db"*/) or die($link);
     
    $username = stripcslashes($username);
    $password = stripcslashes($password);
    $username = mysqli_real_escape_string($link, $username);
    $password = mysqli_real_escape_string($link, $password);
     
    $sql = mysqli_query($link, "select * from logowanie where username = '$username' and password = '$password'");

    $row = mysqli_fetch_array($sql);
    if ($row['username'] == $username && $row['password'] == $password ) {
        echo "Poprawnie zalogowano";
    }
    else {
        echo "Blad z logowaniem!";
    }
     
?>

Jeśli chodzi natomiast o XSS, to możesz użyć htmlspecialchars() - poczytaj, a w razie problemów pisz.

Mam nadzieję, że pomogłem.

Pozdrawiam.

komentarz 5 lipca 2019 przez Nerez Użytkownik (970 p.)
Nic już z tego nie rozumiem. Wszystko zrobione co wysyłałeś, nie wyskakuje żaden błąd, ale po wpisaniu byle jakich danych w polu logowania, piszę "Poprawnie Zalogowano'. Jak
?
komentarz 5 lipca 2019 przez Chess Szeryf (76,710 p.)

To co napisałeś, to raczej antywzorzec. Parametry się binduje, a nie escape'uje. forumweb.pl

 

komentarz 5 lipca 2019 przez Nerez Użytkownik (970 p.)
Rozumiem, że nie powinienem prosic, ale mógłbyś zamienić to co mam źle na to co pisałeś? Całkowicie tego nie umiem.
0 głosów
odpowiedź 5 lipca 2019 przez Chess Szeryf (76,710 p.)

W uproszczeniu, taki mini-system logowania może wyglądać następująco.

<body style="background: darkolivegreen;">
<?php
session_start();

$mysqli = new mysqli('localhost', 'root', 'mystrongpass', 'forumphp');

$login = 'hello1';
$password = 'hello2';

$stmt = $mysqli->prepare("SELECT `login`, `password` FROM `admins` WHERE `login`=? and `password`=?;");
$stmt->bind_param('ss', $login, $password);

$stmt->execute();


if($stmt->get_result()->num_rows == 1) {
  $_SESSION['login_password'] = 1;
} else {
  $_SESSION['login_password'] = 0;
}


if($_SESSION['login_password'] == 1) {
  echo "You is logged";
} else {
  echo "You isn't logged";
}

?>
</body>

Podobne pytania

0 głosów
3 odpowiedzi 631 wizyt
pytanie zadane 28 lipca 2020 w PHP przez x_000 Obywatel (1,460 p.)
+2 głosów
0 odpowiedzi 121 wizyt
pytanie zadane 6 lipca 2019 w HTML i CSS przez Nerez Użytkownik (970 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 11 listopada 2022 w PHP przez mrc Nowicjusz (200 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...