Hướng dẫn username and password validation in php with database - xác thực tên người dùng và mật khẩu trong php với cơ sở dữ liệu

Có quá nhiều điều sai trái với mã này:

1- Bạn có lỗ tiêm SQL.

Nếu tôi nhập

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
4 làm tên người dùng, tôi sẽ luôn có quyền truy cập, bất kể điều gì. Thay đổi mã của bạn thành.
Change your code into.

$username = mysql_real_escape_string($_POST['username']); 
$password = mysql_real_escape_string($_POST['password']); 

Xem: Làm thế nào để tiêm SQL từ truyện tranh XKCD "Bảng Bobby"?

2- Bạn đang lưu trữ mật khẩu rõ ràng Đây là một không lớn không. Kết hợp với lỗ tiêm SQL, sẽ mất một hacker 5 phút để có được danh sách tất cả các tên người dùng và mật khẩu trên trang web của bạn.
This is a huge no no. Combined with the SQL-injection hole, it will take a hacker 5 minutes to get a list of all usernames and passwords on your site.

Lưu trữ mật khẩu dưới dạng băm muối.

Tôi thích sử dụng tên người dùng làm muối.

Bạn lưu trữ mật khẩu băm bằng cách sử dụng:

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))

Và bạn kiểm tra thông tin đăng nhập người dùng bằng cách sử dụng:

SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)

Xem: băm an toàn và muối cho mật khẩu PHP và: "muối" khi liên quan đến mysql sha1 là gì?
And: What is "salt" when relating to MYSQL sha1?

BTW, sử dụng SHA2 với 512 kEyLENT, SHA1 không còn an toàn và MD5 thậm chí còn bị hỏng nhiều hơn.

3- Một thông tin đăng nhập chỉ có thể khớp với 1 người dùng mã này:
This code:

if($numrows > 0) 

Không có ý nghĩa, nếu bạn nhận được 2 hàng ra khỏi cơ sở dữ liệu, đó là một dấu hiệu rõ ràng ai đó đã hack hệ thống của bạn. Bài kiểm tra nên là:

if($numrows > 1) { //send email to sysadmin that my site has been hacked }
else if ($numrows = 0) { echo "wrong username or password" }
else { echo "welcome dr. Falken" }

4- Đừng chết nếu có lỗi, hãy gọi một thói quen để khởi động lại kết nối hoặc một cái gì đó

Mã này:

$result = mysql_query($sql) or die(mysql_error());    

Tốt trong thử nghiệm, nhưng trong sản xuất, bạn nên làm một cái gì đó như

$result = mysql_query($sql);
if ($result) {
  //do the deed
} else {
  //call error recovery routine
}

Thói quen khôi phục lỗi sẽ kết nối lại với máy chủ, đăng nhập lỗi trong nhật ký. Là lỗi không thể được sửa, nó sẽ gửi email đến sysadmin và chỉ sau đó chết máy chủ.

Khóa học cho thấy cách xây dựng chức năng đăng ký với PHP và MySQL. Trong khóa học, chúng tôi sẽ học và thực hành xây dựng chức năng này và cách gửi email xác nhận để đăng ký thành công người dùng trong ứng dụng PHP.

Trong bài học này, chúng ta sẽ học cách xác nhận dữ liệu đến từ mẫu đăng ký người dùng. Tập lệnh mới mà chúng tôi sẽ tạo trong bài học này chịu trách nhiệm xác thực dữ liệu và logic xử lý lỗi.

Đảm bảo kiểm tra bài học trước để có mẫu đăng ký người dùng tại chỗ cho bài học này.

Tổng quan về bài học

Trong bài học này, chúng ta sẽ học:

  • Làm thế nào để đảm bảo tất cả các trường cần thiết có mặt
  • Cách xác thực và kiểm tra mật khẩu và xác nhận mật khẩu

Đăng ký biểu mẫu

Mẫu thanh ghi mà chúng tôi đã tạo trong bài học trước thực hiện hai hành động:

  • Nó chuyển hướng người dùng từ trang
    INSERT INTO users (username, passhash) 
    VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
    
    5 đến trang
    INSERT INTO users (username, passhash) 
    VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
    
    6
  • Nó gửi dữ liệu đã gửi qua biến mảng $ _POST đến một tập lệnh với tên
    INSERT INTO users (username, passhash) 
    VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
    
    6

Hướng dẫn username and password validation in php with database - xác thực tên người dùng và mật khẩu trong php với cơ sở dữ liệu

Biến

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8 chứa dữ liệu được gửi từ biểu mẫu và được chuyển cho tập lệnh
INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
6.

Rất dễ dàng để truy cập dữ liệu biểu mẫu từ biến

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8. Để thực hiện việc này, biến
INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8 nên được sử dụng như một biến mảng với khóa, được sử dụng làm tên của trường Mẫu đầu vào.

Vui lòng tham khảo biểu mẫu để có được đối số tên đúng của các trường đầu vào.

<form action="signup.php" method="POST">
  Username: <input type="text" name="username" /><br />
  Email: <input type="text" name="email" /><br />
  Password: <input type="text" name="password" /><br />
  Confirm password: <input type="text" name="password_confirm" /><br />
  <input type="submit" value="Register" />
</form>

Tên của các trường đầu vào biểu mẫu là:

  • tên tài khoản
  • e-mail
  • mật khẩu mở khóa
  • password_confirm

Để truy cập dữ liệu đã được gửi và có sẵn trong mảng biến

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8, chúng tôi phải sử dụng các khóa ở trên và gán kết quả thành các biến.

<?php

$username = $_POST['username'];
$email = $_POST['email'];
$password = $_POST['password'];
$passwordConfirm = $_POST['username'];

Điều này sẽ hoạt động, tuy nhiên nếu không có dữ liệu với khóa sử dụng PHP sẽ hiển thị như một cảnh báo, nói rằng chìa khóa không tồn tại.

Thẩm định

Để xác thực, chúng tôi phải xác minh rằng dữ liệu được gửi từ mẫu đăng ký có sẵn trong mảng biến

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8 và không trống. Vì chúng tôi không muốn cho phép các giá trị trống khi tất cả các trường đầu vào biểu mẫu được yêu cầu cho quy trình đăng ký người dùng.

Chúng tôi sẽ sử dụng hàm

SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)
4 PHP. Hàm cho phép kiểm tra xem khóa của tồn tại trong mảng và xác minh rằng giá trị có mặt và không trống.

Hãy gán biến

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
8 vào biến
SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)
6 cục bộ.

<?php

$data = $_POST;

if (empty($data['username']) ||
    empty($data['password']) ||
    empty($data['email']) ||
    empty($data['password_confirm'])) {
    
    //do something
}

Như bạn đã nhận thấy, chúng tôi đã sử dụng toán tử

SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)
7 (hoặc) để đảm bảo rằng tất cả các tham số được cung cấp. Nếu ít nhất một giá trị trống hoặc không tồn tại, chúng tôi sẽ hiển thị thông báo lỗi cho người dùng.

Hàm

SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)
8 PHP cho phép in tin nhắn trong trình duyệt và hoàn thành việc thực thi tập lệnh. Việc sử dụng hàm
SELECT * FROM users 
WHERE username = '$username' AND 
passhash = SHA2(CONCAT('$password','$username'),512)
8 là một giải pháp tạm thời, chúng tôi sẽ xóa và sử dụng biến
if($numrows > 0) 
0 để đặt tin nhắn. Hiện tại, chúng ta hãy hiển thị thông báo trên cùng một trang.

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
0

Hãy đặt tin nhắn vào câu lệnh

if($numrows > 0) 
1.

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
1

Xác thực mật khẩu

Đối với các trường mật khẩu và mật khẩu_confirm, chúng tôi sẽ kiểm tra xem cả hai giá trị có giống nhau không. Chúng tôi sẽ hiển thị một thông báo lỗi nếu nó không.

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
2

Do đó, dữ liệu được truyền từ mẫu đăng ký người dùng được kiểm tra cho sự hiện diện của nó và mật khẩu và mật khẩu xác nhận khớp.

Tập lệnh

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
6 có cả hai xác nhận dưới đây:

INSERT INTO users (username, passhash) 
VALUES ('$username', SHA2(CONCAT('$password','$username'),512))
3

Trong bài học tiếp theo, chúng tôi sẽ bao gồm xác thực cơ sở dữ liệu.

Làm cách nào tôi có thể khớp tên người dùng và mật khẩu cơ sở dữ liệu của tôi trong PHP?

PHP $ servername = "localhost"; $ username = "root"; $ password = ""; $ databasename = "test"; $ Conn = mysqli_connect ($ servername, $ username, $ password, $ databasename); $ un = $ _post ['tên người dùng']; $ pw = $ _post ['mật khẩu']; In $ Pass.

Làm cách nào để lấy mật khẩu và xác nhận mật khẩu trong PHP?

Chỉ cần nhận cả mật khẩu và xác nhận các trường mật khẩu trong biểu mẫu Gửi PHP và kiểm tra cho bình đẳng: if ($ _post ["Mật khẩu"] === $ _POST ["isp xác nhận_password"]) {// Thành công! }if ($_POST["password"] === $_POST["confirm_password"]) { // success! }

Làm cách nào để kết nối trang đăng nhập và trang đăng ký của tôi với cơ sở dữ liệu của tôi?

Bước 1- Tạo biểu mẫu đăng nhập PHP HTML.Để tạo biểu mẫu đăng nhập, hãy làm theo các bước được đề cập dưới đây: ....
Bước 2: Tạo mã CSS để thiết kế trang web.....
Bước 3: Tạo bảng cơ sở dữ liệu bằng MySQL.....
Bước 4: Mở kết nối với cơ sở dữ liệu MySQL.....
Bước 5 - Tạo một phiên đăng xuất.....
Bước 6 - Tạo mã cho trang chủ ..

Làm cách nào để tìm tên người dùng và mật khẩu cơ sở dữ liệu của tôi?

Ngoài ra, bạn có thể sử dụng tên máy chủ của Trung tâm dữ liệu Đông và Bờ Đông theo bước số 4 bên dưới để đăng nhập ...
Bước 1 - Tìm tên cơ sở dữ liệu của bạn.Truy cập trang cơ sở dữ liệu MySQL và cuộn xuống phần có tiêu đề cơ sở dữ liệu trên máy chủ này.....
Bước 2 - Tìm tên người dùng của bạn.....
Bước 3 - Tìm mật khẩu của bạn.....
Bước 4 - Tìm tên máy chủ của bạn ..