VietTuts

Tự Học Lập Trình Online

  • Home
  • Java
  • Servlet
  • JSP
  • Struts2
  • Hibernate
  • Spring
  • MyBatis
  • Java WS
  • C
  • C++
  • C#
  • Python
  • PHP
  • Excel
  • VBA
  • Web
    • JavaScript
    • JQUERY
    • JSON
    • AJAX
    • CSS
    • HTML
    • HTML5
    • Node.js
    • Angular 7
  • SQL
    • MySQL
    • SQL Server
  • Misc
    • Eclipse
    • Phần mềm tiện ích
    • Cấu trúc DL&GT
    • Selenium Test

PHP Tut

PHP là gì Cài đặt & ví dụ PHP Lệnh Echo trong PHP Lệnh Print trong PHP Biến trong PHP PHP $ và $$ Biến siêu toàn cầu trong PHP Hằng số trong PHP Hằng số Magic trong PHP Kiểu dữ liệu trong PHP Toán tử trong PHP Comment trong PHP

Cậu Lệnh Điều Khiển

If-else trong PHP Switch trong PHP Vòng lặp For trong PHP Vòng lặp While trong PHP Vòng lặp Do While trong PHP Từ khóa break trong PHP Từ khóa continue trong PHP

PHP Function

Hàm (function) trong PHP Call By Value &Call By Reference Đối số có độ dài biến đổi Đệ quy trong PHP

PHP Array

Mảng (array) trong PHP Các hàm của mảng trong PHP Sắp xếp mảng trong PHP

PHP String

Chuỗi (String) trong PHP Các hàm String trong PHP

PHP Form

PHP Form: Get & Post Validate Form trong PHP

PHP Include

include & require include_once & require_once

State Management

PHP Cookie PHP Session

PHP File

Xử lý file trong PHP Mở file trong PHP Đọc file trong PHP Ghi file trong PHP Append file trong PHP Xóa file trong PHP

Upload Download

Upload file trong PHP Download file trong PHP

PHP Errors

Xử lý lỗi trong PHP Xử lý ngoại lệ trong PHP Debug PHP project trong Eclipse

PHP Mail

PHP Mail

MySQL Database

PHP kết nối MySQL MySQL CREATE DB MySQL CREATE Table MySQL INSERT MySQL UPDATE MySQL SELECT MySQL DELETE

Bài Tập PHP

Bài tập PHP có lời giải

Câu hỏi phỏng vấn

List câu hỏi phỏng vấn PHP
1 / 3
❮ ❯

Validate Form trong PHP


Xử lý Form trong PHP
Câu lệnh include và require trong PHP

Bài này sẽ hướng dẫn bạn cách xác thực Form - Validate Form trong PHP.

Trong bài này, chúng ta sẽ validate form có dạng như sau:

Các quy tắc để xác thực cho form trên như sau:

Field Validation Rules
Name Bắt buộc. Chỉ chứa ký tự chữ và dấu cách.
E-mail Bắt buộc. Một email hợp lệ chứa ký tự @ và dấu chấm (.)
Website Tùy chọn. Nếu được nhập, URL phải hợp lệ.
Comment Tùy chọn. Chó phép nhập nhiều dòng (textarea)
Gender Bắt buộc. Phải chọn 1 tùy chọn

File comment.php

<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>

<?php
const REQUIRED_MSG = "is required";

// định nghĩa các biến và set giá trị mặc định là blank
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

// xác thực form bằng PHP
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Name " . REQUIRED_MSG;
  } else {
    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
      $nameErr = "Only letters and white space allowed"; 
    }
  }
  
  if (empty($_POST["email"])) {
    $emailErr = "Email " . REQUIRED_MSG;
  } else {
    if (!preg_match("/^[a-zA-Z][\\w-]+@([\\w]+\\.[\\w]+
          |[\\w]+\\.[\\w]{2,}\\.[\\w]{2,})$/", $email)) {
      $emailErr = "Invalid email format"; 
    }
  }
    
  if (empty($_POST["website"])) {
    $website = "";
  } else {
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*
          [-a-z0-9+&@#\/%=~_|]/i", $website)) {
      $websiteErr = "Invalid URL"; 
    }
  }

  if (empty($_POST["comment"])) {
    $comment = "";
  } else {
    $comment = test_input($_POST["comment"]);
  }

  if (empty($_POST["gender"])) {
    $genderErr = "Gender " . REQUIRED_MSG;
  } else {
    $gender = test_input($_POST["gender"]);
  }
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

<h2>Ví dụ Validate Form trong PHP</h2>
<p><span class="error">* required field</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  <table>
    <tr>
      <td>Name:</td>
      <td><input type="text" name="name">
        <span class="error">* <?php echo $nameErr;?></span>
      </td>
    </tr>
    <tr>
      <td>E-mail:</td>
      <td><input type="text" name="email">
        <span class="error">* <?php echo $emailErr;?></span>
      </td>
    </tr>
    <tr>
      <td>Website:</td>
      <td><input type="text" name="website">
        <span class="error"><?php echo $websiteErr;?></span>
      </td>
    </tr>
    <tr>
      <td>Comment:</td>
      <td><textarea name="comment" rows="5" cols="40"></textarea></td>
    </tr>
    <tr>
      <td>Gender:</td>
      <td>
        <input type="radio" name="gender" value="female">Female
        <input type="radio" name="gender" value="male">Male
        <input type="radio" name="gender" value="other">Other
        <span class="error">* <?php echo $genderErr;?></span>
      </td>
    </tr>
    <tr>
      <td></td>
      <td><input type="submit" name="submit" value="Submit"></td>
    </tr>
  </table>
</form>

<?php
echo "<h2>Thông tin bạn đã nhập:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

Nội dung chính

  • Các phần tử trong ví dụ
    • Thẻ Form
    • Big Note về bảo mật PHP Form
    • Làm thế nào để tránh $_SERVER ["PHP_SELF"] bị Khai thác?

Các phần tử trong ví dụ

Thẻ Form

Thẻ Form trong ví dụ của chúng ta như sau:

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

Khi click button [Submit], dữ liệu form được gửi với method="post".

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

$_SERVER["PHP_SELF"] là biến siêu toàn cầu trong PHP trả về tên file của hiện tại.

Vì vậy, $_SERVER["PHP_SELF"] sẽ gửi dữ liệu form đến chính nó, thay vì nhảy sang trang khác.

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ư < and > với &lt; và &gt;. Điều này ngăn cản kẻ tấn công khai thác lỗ hổng bằng cách tiêm mã HTML hoặc Javascript (Cross-site Scripting attacks) vào form.


Big Note về bảo mật PHP Form

Biến $ _SERVER ["PHP_SELF"] có thể được 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 một dấu gạch chéo (/) và sau đó 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 được tìm 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 mà người dùng khác xem.

Giả sử chúng ta có dạng sau trong một trang có tên là "test_form.php":

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

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

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

Tuy nhiên, nếu người dùng nhập URL sau vào thanh địa chỉ:

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

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

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

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

Lưu ý: bất kỳ mã JavaScript nào cũng có thể được thêm vào bên trong thẻ <script>! Một hacker 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 hại có thể thay đổi các biến toàn cầu hoặc gửi form tới một địa chỉ khác để lưu dữ liệu người dùng.


Làm thế nào để tránh $_SERVER ["PHP_SELF"] bị Khai thác?

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

Ví dụ:

<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 các 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ẽ dẫn đến kết quả sau:

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

Nỗ lực khai thác bị thất bại!


Xử lý Form trong PHP
Câu lệnh include và require trong PHP

Recent Updates

Sắp Tết 2024 Rồi! - Còn bao nhiêu ngày nữa là đến tết 2024?Tìm số thuận nghịch trong PHPTính tổng của các chữ số của môt số nguyên nPhân tích số nguyên n thành tích các số nguyên tố trong PHPLiệt kê tất cả số nguyên tố có 5 chữ số trong PHPTìm USCLN và BSCNN của 2 số trong PHPChuyển đổi hệ cơ số trong PHPLiệt kê số Fibonacci nhỏ hơn n và là số nguyên tố trong PHPCheck số nguyên tố trong PHPDãy số Fibonacci trong PHPTính giai thừa trong PHPBài tập PHP có lời giảiLiệt kê tất cả các số nguyên tố nhỏ hơn n trong PHP

VietTuts on facebook

Học Lập Trình Online Miễn Phí - VietTuts.Vn
Danh Sách Bài Học

Học Java | Hibernate | Spring
Học Excel | Excel VBA
Học Servlet | JSP | Struts2
Học C | C++ | C#
Học Python
Học SQL

Bài Tập Có Lời Giải

Bài tập Java
Bài tập C
Bài tập C++
Bài tập C#
Bài tập Python
Ví dụ Excel VBA

Câu Hỏi Phỏng Vấn

201 câu hỏi phỏng vấn java
25 câu hỏi phỏng vấn servlet
75 câu hỏi phỏng vấn jsp
52 câu hỏi phỏng vấn Hibernate
70 câu hỏi phỏng vấn Spring
57 câu hỏi phỏng vấn SQL

Scroll back to top

Copyright © 2016 VietTuts.Vn all rights reserved. | Liên hệ | Chính sách - riêng tư | sitemap.html | sitemap_index.xml