Hướng dẫn secure php login system github - hệ thống đăng nhập php an toàn github

Hệ thống chứng khoán

Một hệ thống đăng nhập PHP an toàn được thực hiện từ đầu với các biện pháp bảo vệ chống lại một số cuộc tấn công phổ biến

Kiểm tra danh sách phát YouTube tại đây: https://www.youtube.com/playlist?list=PLG5M8QIX5LKWT6LY5V34ULPX_5ANPUEB3

Xin lưu ý mã này không được cung cấp để bạn có thể chỉ cần sao chép và dán nó (mặc dù không có vấn đề pháp lý nào khi làm như vậy). Nó có thể không hoạt động ra khỏi hộp cho bạn. Mục đích đằng sau việc đăng mã là bạn có thể theo dõi cùng với các video và làm cho nó nếu bạn cần. Vui lòng không spam phần bình luận của video của tôi với thông báo lỗi nếu bạn gặp sự cố khi thực hiện nó. Tuy nhiên, nếu bạn tìm thấy một vấn đề với mã thực tế (không phải là vấn đề chỉ áp dụng cho Enviornment của bạn), vui lòng gửi vấn đề cho GitHub.

Tính năng / bảo vệ

  • Đăng nhập (được bảo vệ chống lại các cuộc tấn công vũ phu/từ điển)
  • Đăng ký
  • Đặt lại mật khẩu (được thực hiện một cách an toàn và thân thiện)
  • Xác thực email (đảm bảo người dùng có quyền truy cập vào email mà họ đã sử dụng để tạo tài khoản)
  • Bảo vệ CSRF cho tất cả các tính năng/biểu mẫu
  • Xóa tài khoản
  • Tất cả các tính năng được bảo vệ khỏi tiêm SQL bằng cách sử dụng các câu lệnh được chuẩn bị PHP
  • XSS Protection (xem Video về cách hiển thị khi thêm các trang của riêng bạn với dữ liệu không đáng tin cậy trên chúng)
  • Tất cả các mật khẩu được băm để ngay cả khi truy cập vào những kẻ tấn công cơ sở dữ liệu cũng không thể lấy mật khẩu người dùng (mật khẩu được băm và muối)

... có thể nhiều hơn là tôi không nghĩ đến lúc viết bài này

Một số tính năng có thể chưa được thực hiện

Nóng để sử dụng

  1. Tải xuống và cài đặt MAMP/XAMPP (hãy tải xuống riêng PHP, MySQL và máy chủ Apache nếu bạn biết bạn đang làm gì)
  2. Đảm bảo bạn đang sử dụng phiên bản cập nhật của PHP. Tôi đã thử nghiệm với phiên bản 8 nhưng 7 nên hoạt động tuy nhiên tôi chưa tự kiểm tra nó.
  3. Sao chép và dán tất cả các tệp vào thư mục công khai
  4. Sửa đổi Config.php để phù hợp với môi trường và trường hợp sử dụng của bạn (cũng có thể phải sửa đổi các tệp khác)
  5. Bắt đầu Dịch vụ Máy chủ MySQL và Apache
  6. Ghé thăm trang web của bạn và kiểm tra

Một thẻ đã tồn tại với tên chi nhánh được cung cấp. Nhiều lệnh GIT chấp nhận cả tên thẻ và tên chi nhánh, vì vậy việc tạo nhánh này có thể gây ra hành vi bất ngờ. Bạn có chắc là bạn muốn tạo chi nhánh này?

Hệ thống đăng nhập an toàn - Hệ thống đăng nhập OPOP PHP/MySQL đơn giản với sự tập trung vào bảo mật

Các tính năng của lớp

  • Đăng ký và đăng nhập tài khoản qua email và mật khẩu
  • Hỗ trợ tài khoản nhiều người dùng
  • Hỗ trợ đa ngôn ngữ (hiện đang dịch cho tiếng Anh và tiếng Đức)
  • Xác minh e-mail tùy chọn (có thể định cấu hình cường độ mã thông báo)
  • Tính năng quên từ password
  • Tính năng Reset-Password
  • Tất cả các biến và cấu hình gây tranh cãi đều dễ dàng được cấu hình từ lớp Configuration
  • Độ dài mật khẩu bắt buộc có thể định cấu hình (mặc định là 8 ký tự)
  • Cấu hình, ký tự mật khẩu tối thiểu (chữ thường và chữ hoa, số và ký tự đặc biệt)
  • Sử dụng rất dễ dàng thông qua PHP OOP

Lợi ích bảo mật mặc định

  • Mật khẩu Hashed & Salted (________ 5 BCRYPT thuật toán) - Mật khẩu không bao giờ được xử lý trong văn bản đơn giản
  • Chạy kết nối cơ sở dữ liệu bằng cách sử dụng các câu lệnh được chuẩn bị PDO và sử dụng PDO::ERRMODE_EXCEPTION - Không sử dụng MySQLI
  • Tất cả các đầu vào của người dùng được tuần tự hóa đúng cách bằng cách sử dụng htmlentities()

Cách sử dụng

Tải và tạo phiên bản SLS

require 'SLS.php';

$sls = SLS::getInstance();

Đăng nhập người dùng

Mã sau sẽ đăng nhập vào người dùng, khởi tạo phiên của anh ấy và chuyển hướng anh ấy đến trang bí mật confidential.php

$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}

$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
0 Trả về một đối tượng
$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
1

Đăng ký người dùng

$user = $sls->registerUser($email, $plainTextPassword);

$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
2 Trả về một đối tượng
$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
1

Người dùng sẽ tự động đăng nhập sau khi đăng ký thành công.

Có được ID người dùng và địa chỉ e-mail

Các phương thức getter

$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
4 và
$user = $sls->loginUser($username,$plainTextPassword);
if ($user != null) {
    session_start();
    $_SESSION['id'] = $user->getId();
    header('Location: confidential.php');
} else {
    $error = "E-Mail/Password wrong.";
}
5 Trả về id id ____ 16 và địa chỉ e-mail của ____ 16

$id = $user->getID();
$email = $user->Email();

Đóng góp

Yêu cầu kéo được chào đón. Đối với những thay đổi lớn, xin vui lòng mở một vấn đề trước để thảo luận về những gì bạn muốn thay đổi.

Giấy phép

Hệ thống đăng nhập an toàn là miễn phí cho sử dụng cá nhân. Thay đổi và sửa đổi nó như bạn muốn. Nếu bạn thích sử dụng hệ thống đăng nhập an toàn về mặt thương mại, vui lòng gửi cho tôi một email tại và chúng tôi sẽ tìm một giải pháp.