Chức năng bảo mật PHP: Strip_tags, filter_var, Md5 và sha1
Các mối đe dọa an ninh tiềm ẩn
Về cơ bản, họ là hai nhóm người có thể tấn công hệ thống của bạn
- Tin tặc – với mục đích giành quyền truy cập vào dữ liệu trái phép hoặc làm gián đoạn ứng dụng
- Người dùng - họ có thể vô tình nhập sai tham số vào các biểu mẫu có thể gây ảnh hưởng tiêu cực đến trang web hoặc ứng dụng web.
Sau đây là những loại tấn công mà chúng ta cần phải cảnh giác.
SQL Injection – Kiểu tấn công này gắn thêm mã có hại vào SQL các câu lệnh.
Điều này được thực hiện bằng cách sử dụng biểu mẫu nhập của người dùng hoặc URL sử dụng biến.
Mã được nối thêm nhận xét điều kiện trong mệnh đề WHERE của câu lệnh SQL. Mã được nối thêm cũng có thể;
- chèn một điều kiện sẽ luôn đúng
- xóa dữ liệu khỏi bảng
- cập nhật dữ liệu trong bảng
- Kiểu tấn công này thường được sử dụng để có được quyền truy cập trái phép vào một ứng dụng.
Kịch bản chéo trang – loại tấn công này thường chèn mã độc hại JavaScript. Điều này được thực hiện bằng cách sử dụng các biểu mẫu nhập liệu của người dùng như biểu mẫu liên hệ với chúng tôi và biểu mẫu bình luận. Điều này được thực hiện để;
- Truy xuất thông tin nhạy cảm như dữ liệu cookie
- Chuyển hướng người dùng đến một URL khác.
- Các mối đe dọa khác có thể bao gồm – Tiêm mã PHP, Tiêm Shell, Tiêm Email, Tiết lộ mã nguồn tập lệnh, v.v.
Các phương pháp hay nhất về bảo mật ứng dụng PHP
Bây giờ chúng ta hãy xem xét một số phương pháp hay nhất về Bảo mật PHP mà chúng ta phải xem xét khi phát triển ứng dụng của mình.
PHP dải_tags
Các hàm Strip_tags loại bỏ HTML, JavaScript hoặc các thẻ PHP từ một chuỗi.
Chức năng này hữu ích khi chúng ta phải bảo vệ ứng dụng của mình khỏi các cuộc tấn công như tập lệnh chéo trang.
Hãy xem xét một ứng dụng chấp nhận nhận xét từ người dùng.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Giả sử bạn đã lưu comments.php trong thư mục phptuts, hãy duyệt đến URLhttp://localhost/phptuts/comments.php
Giả sử bạn nhận được thông tin sau đây là thông tin đầu vào của người dùng alert(‘Your site sucks!’);
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Duyệt đến URL http://localhost/phptuts/comments.php
Bây giờ hãy bảo vệ ứng dụng của chúng ta khỏi các cuộc tấn công như vậy bằng cách sử dụng hàm Strip_tags.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo strip_tags($user_input); ?>
Duyệt đến URL http://localhost/phptuts/comments.php
Hàm filter_var của PHP
Hàm filter_var được sử dụng để xác thực và vệ sinh dữ liệu.
Xác thực kiểm tra xem dữ liệu có đúng loại hay không. Kiểm tra xác thực bằng số trên một chuỗi trả về kết quả sai.
Khử trùng là loại bỏ các ký tự không hợp lệ khỏi một chuỗi.
Kiểm tra liên kết này để tham khảo đầy đủ bộ lọc_var
Mã này dành cho hệ thống bình luận.
Nó sử dụng hàm filter_var và hằng số FILTER_SANITIZE_STRIPPED để loại bỏ thẻ.
<?php $user_input = "<script>alert('Your site sucks!');</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Đầu ra:
alert('Your site sucks!');
Hàm mysqli_real_escape_string Hàm này được sử dụng để bảo vệ ứng dụng khỏi việc tiêm SQL.
Giả sử chúng ta có câu lệnh SQL sau để xác thực ID người dùng và mật khẩu.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Người dùng có ý đồ xấu có thể nhập mã sau vào hộp văn bản ID người dùng. ' HOẶC 1 = 1 — Và 1234 vào hộp văn bản mật khẩu Hãy mã hóa mô-đun xác thực
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Kết quả cuối cùng sẽ là
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
ĐÂY,
- “CHỌN * TỪ người dùng WHERE user_id = ”” kiểm tra id người dùng trống
- “'OR 1 = 1" là điều kiện luôn đúng
- “–” nhận xét phần kiểm tra mật khẩu.
Truy vấn trên sẽ trả về tất cả người dùng Bây giờ chúng ta hãy sử dụng hàm mysqli_real_escape_string để bảo mật mô-đun đăng nhập của chúng ta.
<?php $uid = mysqli_real_escape_string("' OR 1 = 1 -- "); $pwd = mysqli_real_escape_string("1234"); $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Đoạn mã trên sẽ xuất ra
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Chú thích trích dẫn thứ hai đã được loại bỏ đối với chúng tôi, nó sẽ được coi là một phần của id người dùng và mật khẩu sẽ không được nhận xét.
PHP Md5 và PHP sha1
Md5 là từ viết tắt của Message Digest 5 và sha1 là từ viết tắt của Thuật toán băm an toàn 1.
Cả hai đều được sử dụng để mã hóa chuỗi.
Khi một chuỗi đã được mã hóa, việc giải mã nó sẽ rất tẻ nhạt.
Md5 và sha1 rất hữu ích khi lưu trữ mật khẩu trong cơ sở dữ liệu.
Đoạn mã dưới đây cho thấy việc triển khai md5 và sha1
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Giả sử bạn đã lưu file hashes.php trong thư mục phptuts, hãy duyệt đến URL
Như bạn có thể thấy từ các giá trị băm ở trên, nếu kẻ tấn công có được quyền truy cập vào cơ sở dữ liệu của bạn, chúng vẫn không biết mật khẩu để đăng nhập.
Tổng kết
- Bảo mật đề cập đến các biện pháp được đưa ra để bảo vệ ứng dụng khỏi các cuộc tấn công vô tình và độc hại.
- Hàm Strip_tags được sử dụng để xóa các thẻ như từ dữ liệu đầu vào
- Hàm filter_var xác thực và php vệ sinh dữ liệu đầu vào
- mysqli_real_escape_string được sử dụng để vệ sinh câu lệnh SQL. Nó loại bỏ các ký tự độc hại khỏi các câu lệnh
- cả MD5 và SHA1 đều được sử dụng để mã hóa mật khẩu.