Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

Hướng dẫn PHP

PHP TRANG CHỦ PHP Giới thiệu PHP Cài đặt PHP Cú pháp PHP Bình luận PHP Biến PHP PHP Echo / In Các kiểu dữ liệu PHP Chuỗi PHP Số PHP PHP Casting PHP Toán học PHP Hằng số PHP Magic Constants PHP Toán tử PHP If...Else...Elseif Chuyển đổi PHP Vòng lặp PHP Hàm PHP Mảng PHP Siêu toàn cầu PHP PHP RegEx

Biểu mẫu PHP

Xử lý biểu mẫu PHP Xác thực biểu mẫu PHP Yêu cầu biểu mẫu PHP URL biểu mẫu PHP/E-mail Biểu mẫu PHP Hoàn thành

PHP nâng cao

PHP Ngày và giờ PHP Bao gồm PHP Xử lý tệp PHP Mở/Đọc tệp PHP Tạo/ghi tệp PHP Tải lên tệp PHP PHP Cookies Phiên PHP Bộ lọc PHP Bộ lọc PHP Hàm gọi lại PHP nâng cao PHP JSON Ngoại lệ PHP

PHP OOP

PHP OOP Lớp/Đối tượng PHP là gì Trình tạo PHP Trình phá hủy PHP Công cụ sửa đổi truy cập PHP Kế thừa PHP Hằng số PHP Lớp trừu tượng PHP Giao diện PHP Đặc điểm PHP Phương thức tĩnh PHP Thuộc tính tĩnh PHP Không gian tên PHP Vòng lặp PHP

Cơ sở dữ liệu MySQL

Cơ sở dữ liệu MySQL MySQL Kết nối MySQL Tạo DB MySQL Tạo bảng MySQL Chèn dữ liệu MySQL Nhận ID cuối cùng MySQL Chèn nhiều MySQL MySQL đã chuẩn bị Chọn dữ liệu MySQL Nơi MySQL đặt hàng bằng MySQL Xóa dữ liệu cập nhật MySQL Dữ liệu giới hạn MySQL

PHP XML

Trình phân tích cú pháp XML của PHP Trình phân tích cú pháp PHP SimpleXML PHP SimpleXML - Nhận PHP XML Expat PHP XML DOM

PHP - AJAX

Giới thiệu AJAX AJAX PHP Cơ sở dữ liệu AJAX AJAX XML AJAX Tìm kiếm trực tiếp AJAX Thăm dò ý kiến

PHP Ví dụ

Ví dụ về PHP Trình biên dịch PHP Câu hỏi PHP Bài tập PHP Máy chủ PHP Chứng chỉ PHP

Tham khảo PHP

Tổng quan về PHP Mảng PHP Lịch PHP Ngày PHP Thư mục PHP Lỗi PHP Ngoại lệ PHP Hệ thống tập tin PHP Bộ lọc PHP PHP FTP JSON của PHP Từ khóa PHP PHP Libxml Thư PHP Toán PHP PHP Khác PHP MySQLi Mạng PHP Kiểm soát đầu ra PHP PHP RegEx PHP SimpleXML Luồng PHP Chuỗi PHP Xử lý biến PHP Trình phân tích cú pháp XML của PHP Mã zip PHP Múi giờ PHP

Xác thực biểu mẫu PHP


Chương này và các chương tiếp theo trình bày cách sử dụng PHP để xác thực dữ liệu biểu mẫu.


Xác thực biểu mẫu PHP

Hãy suy nghĩ về AN NINH khi xử lý các biểu mẫu PHP!

Các trang này sẽ hiển thị cách xử lý các biểu mẫu PHP có lưu ý đến tính bảo mật. Việc xác thực đúng dữ liệu biểu mẫu là rất quan trọng để bảo vệ biểu mẫu của bạn khỏi tin tặc và kẻ gửi thư rác!

Biểu mẫu HTML mà chúng ta sẽ làm việc trong các chương này chứa nhiều trường đầu vào khác nhau: trường văn bản bắt buộc và tùy chọn, nút radio và nút gửi:

Các quy tắc xác thực cho biểu mẫu trên như sau:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

Đầu tiên chúng ta sẽ xem xét mã HTML đơn giản cho biểu mẫu:



Trường văn bản

Các trường tên, email và trang web là các thành phần nhập văn bản và trường nhận xét là một vùng văn bản.

Mã HTML trông như thế này:

 Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Nút chọn

Các trường giới tính là các nút radio và mã HTML trông như thế này:

 Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Phần tử biểu mẫu

Mã HTML của biểu mẫu trông như thế này:

 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Khi biểu mẫu được gửi, dữ liệu biểu mẫu sẽ được gửi bằng phương thức = "post".

Biến $_SERVER["PHP_SELF"] là gì?

$_SERVER["PHP_SELF"] là một biến siêu toàn cục trả về tên tệp của tập lệnh hiện đang thực thi.

Vì vậy, $_SERVER["PHP_SELF"] gửi dữ liệu biểu mẫu đã gửi đến chính trang đó, thay vì chuyển sang một trang khác. Bằng cách này, người dùng sẽ nhận được thông báo lỗi trên cùng một trang với biểu mẫu.

Hàm htmlspecialchars() là gì?

Hàm htmlspecialchars() chuyển đổi các ký tự đặc biệt thành các thực thể HTML. Điều này có nghĩa là nó sẽ thay thế các ký tự HTML như <> bằng &lt;&gt; . Điều này ngăn chặn kẻ tấn công khai thác mã bằng cách chèn mã HTML hoặc Javascript (tấn công Cross-site Scripting) vào biểu mẫu.


Cảnh báo!

Biến $_SERVER["PHP_SELF"] có thể bị tin tặc sử dụng!

Nếu PHP_SELF được sử dụng trong trang của bạn thì người dùng có thể nhập dấu gạch chéo / và sau đó nhập một số lệnh Cross Site Scripting (XSS) để thực thi.

Cross-site scripting (XSS) là một loại lỗ hổng bảo mật máy tính thường thấy trong các ứng dụng Web. XSS cho phép kẻ tấn công chèn tập lệnh phía máy khách vào các trang Web được người dùng khác xem.

Giả sử chúng ta có biểu mẫu sau trong trang có tên "test_form.php":

 <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Bây giờ, nếu người dùng nhập URL bình thường vào thanh địa chỉ như "https://www.example.com/test_form.php", đoạn mã trên sẽ được dịch sang:

 <form method="post" action="test_form.php">

Càng xa càng tốt.

Tuy nhiên, hãy cân nhắc rằng người dùng nhập URL sau vào thanh địa chỉ:

https://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

Trong trường hợp này, đoạn mã trên sẽ được dịch sang:

 <form method="post" action="test_form.php/"><script>alert('hacked')</script>

Mã này thêm thẻ script và lệnh cảnh báo. Và khi tải trang, mã JavaScript sẽ được thực thi (người dùng sẽ thấy hộp cảnh báo). Đây chỉ là một ví dụ đơn giản và vô hại về cách khai thác biến PHP_SELF.

Hãy lưu ý rằng bất kỳ mã JavaScript nào cũng có thể được thêm vào bên trong thẻ <script>! Chẳng hạn, tin tặc có thể chuyển hướng người dùng đến một tệp trên máy chủ khác và tệp đó có thể chứa mã độc có thể thay đổi các biến toàn cục hoặc gửi biểu mẫu đến một địa chỉ khác để lưu dữ liệu người dùng.


Làm cách nào để tránh khai thác $_SERVER["PHP_SELF"]?

Có thể tránh được việc khai thác $_SERVER["PHP_SELF"] bằng cách sử dụng hàm htmlspecialchars() .

Mã biểu mẫu sẽ trông như thế này:

 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Hàm htmlspecialchars() chuyển đổi các ký tự đặc biệt thành thực thể HTML. Bây giờ nếu người dùng cố gắng khai thác biến PHP_SELF, nó sẽ cho kết quả như sau:

 <form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Nỗ lực khai thác không thành công và không gây hại gì!


Xác thực dữ liệu biểu mẫu bằng PHP

Điều đầu tiên chúng ta sẽ làm là chuyển tất cả các biến thông qua hàm htmlspecialchars() của PHP.

Khi chúng ta sử dụng hàm htmlspecialchars() ; sau đó nếu người dùng cố gắng gửi thông tin sau vào trường văn bản:

<script>location.href('https://www.hacked.com')</script>

- điều này sẽ không được thực thi vì nó sẽ được lưu dưới dạng mã thoát HTML, như thế này:

 &lt;script&gt;location.href('https://www.hacked.com')&lt;/script&gt;

Mã bây giờ an toàn để được hiển thị trên một trang hoặc bên trong e-mail.

Chúng tôi cũng sẽ thực hiện thêm hai việc nữa khi người dùng gửi biểu mẫu:

  1. Loại bỏ các ký tự không cần thiết (thêm khoảng trắng, tab, dòng mới) khỏi dữ liệu đầu vào của người dùng (với hàm PHP trim() )
  2. Xóa dấu gạch chéo ngược \ khỏi dữ liệu đầu vào của người dùng (bằng hàm stripslashes() của PHP)

Bước tiếp theo là tạo một hàm sẽ thực hiện tất cả việc kiểm tra cho chúng ta (điều này thuận tiện hơn nhiều so với việc viết đi viết lại cùng một mã).

Chúng ta sẽ đặt tên cho hàm test_input() .

Bây giờ, chúng ta có thể kiểm tra từng biến $_POST bằng hàm test_input() và tập lệnh trông như thế này:

Ví dụ

 // define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
Chạy ví dụ »

Lưu ý rằng khi bắt đầu tập lệnh, chúng tôi kiểm tra xem biểu mẫu đã được gửi hay chưa bằng cách sử dụng $_SERVER["REQUEST_METHOD"] . Nếu REQUEST_METHODPOST thì biểu mẫu đã được gửi - và nó sẽ được xác thực. Nếu nó chưa được gửi, hãy bỏ qua xác nhận và hiển thị một biểu mẫu trống.

Tuy nhiên, trong ví dụ trên, tất cả các trường nhập đều là tùy chọn. Tập lệnh hoạt động tốt ngay cả khi người dùng không nhập bất kỳ dữ liệu nào.

Bước tiếp theo là tạo các trường nhập bắt buộc và tạo thông báo lỗi nếu cần.


×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .