Rate this post

htmlspecialchars() là một hàm trong PHP dùng để chuyển các ký tự đặc biệt trong HTML thành các ký tự giả. Nó sẽ chuyển các ký tự &, “, ‘, < và > thành &, “, ‘, < và >. Điều này giúp ngăn chặn tấn công Cross-site scripting (XSS) khi dữ liệu được nhập vào trang web từ một nguồn không đáng tin cậy.

Các bài viết liên quan:

tại sao nên sử dụng htmlspecialchars  trong php ? 

Sử dụng htmlspecialchars() trong PHP là rất quan trọng để ngăn chặn tấn công Cross-site scripting (XSS). Tấn công XSS là một loại tấn công mà kẻ tấn công sẽ chèn mã độc hoặc mã HTML vào trang web của bạn, khi người dùng truy cập trang web đó, mã đó sẽ được thực thi bởi trình duyệt của người dùng và có thể gây hại cho người dùng hoặc làm cho trang web của bạn bị tấn công.

Sử dụng htmlspecialchars() sẽ chuyển các ký tự đặc biệt trong HTML thành các ký tự giả, giúp ngăn chặn tấn công XSS khi dữ liệu được nhập vào trang web từ một nguồn không đáng tin cậy.

$unsafe_string = "<script>alert('XSS attack')</script>";

$safe_string = htmlspecialchars($unsafe_string, ENT_QUOTES, 'UTF-8');

echo $safe_string

sử dụng htmlspecialchars  trong php như thế nào ? 

Để sử dụng hàm htmlspecialchars() trong PHP, bạn chỉ cần truyền vào chuỗi cần chuyển đổi làm tham số cho hàm. Ví dụ:

$unsafe_string = "<script>alert('XSS attack')</script>";

$safe_string = htmlspecialchars($unsafe_string);

echo $safe_string;

Trong ví dụ trên, chúng ta truyền chuỗi $unsafe_string vào hàm htmlspecialchars() và gán kết quả cho biến $safe_string.

Có thể truyền thêm 2 tham số vào hàm htmlspecialchars, đó là ENT_QUOTES và ‘UTF-8’

$safe_string = htmlspecialchars($unsafe_string, ENT_QUOTES, 'UTF-8');

ENT_QUOTES sẽ tách ra cả dấu nháy kép và đơn, và ‘UTF-8’ là mã hóa ký tự, nó sẽ giúp bảo vệ các ký tự đặc biệt trong UTF-8

Tuy nhiên, nếu dữ liệu được lấy từ cơ sở dữ liệu, chúng ta cần sử dụng hàm mysqli_real_escape_string() hoặc PDO::quote() để loại bỏ các ký tự đặc biệt trước khi sử dụng htmlspecialchars().

những lưu ý khi sử dụng  htmlspecialchars trong php 

  1. Chỉ chuyển đổi các ký tự &, “, ‘, < và >: htmlspecialchars() chỉ chuyển đổi các ký tự &, “, ‘, < và >. Nếu có các ký tự khác cần chuyển đổi, bạn cần sử dụng các hàm khác.
  2. Chỉ chuyển đổi chuỗi: htmlspecialchars() chỉ chuyển đổi chuỗi, nếu truyền vào một biến kiểu số hoặc mảng sẽ không hoạt động.
  3. Chỉ chuyển đổi chuỗi khi hiển thị: htmlspecialchars() chỉ chuyển đổi chuỗi khi hiển thị, nó không thay đổi giá trị của chuỗi gốc.
  4. Chú ý khi sử dụng hàm: Trong trường hợp dữ liệu được lấy từ cơ sở dữ liệu, chúng ta cần sử dụng hàm mysqli_real_escape_string() hoặc PDO::quote() để loại bỏ các ký tự đặc biệt trước khi sử dụng htmlspecialchars()
  5. Chỉ chuyển đổi chuỗi trong một phạm vi: htmlspecialchars() chỉ chuyển đổi chuỗi trong một phạm vi riêng, nếu bạn muốn chuyển đổi cả một mảng hoặc đối tượng thì bạn cần sử dụng hàm array_map() hoặc vòng lặp.
  6. Chuyển đổi chuỗi khi hiển thị: htmlspecialchars() chỉ chuyển đổi chuỗi khi hiển thị, nếu bạn muốn chuyển đổi chuỗi trước khi lưu vào cơ sở dữ liệu hoặc xử lý dữ liệu trước khi gửi đi thì bạn cần sử dụng hàm này trước khi thực hiện các thao tác đó.
  7. Chú ý đến mã hóa ký tự: Nếu bạn sử dụng mã hóa ký tự khác UTF-8 thì bạn cần truyền vào tham số thứ 3 cho hàm htmlspecialchars() để chuyển đổi chuỗi theo mã hóa đó.
  8. Chỉ chuyển đổi một lần: htmlspecialchars() chỉ chuyển đổi một lần, nếu chuỗi đã được chuyển đổi rồi thì bạn không cần chuyển đổi nữa.

ví dụ các trường hợp thường sử dụng

Ví dụ 1: Chuyển đổi chuỗi và hiển thị

$unsafe_string = "<script>alert('XSS attack')</script>";

$safe_string = htmlspecialchars($unsafe_string);

echo $safe_string;

Ví dụ 2: Chuyển đổi chuỗi trước khi lưu vào cơ sở dữ liệu

$unsafe_string = $_POST['user_input'];

$safe_string = htmlspecialchars($unsafe_string);

$query = "INSERT INTO users (name) VALUES ('$safe_string')";

Ví dụ 3: Chuyển đổi mảng chuỗi

$unsafe_array = array("<script>alert('XSS attack')</script>", "<h1>Hello World</h1>", "I'm a hacker");

$safe_array = array_map("htmlspecialchars", $unsafe_array);

Ví dụ 4: Chuyển đổi chuỗi với mã hóa ký tự khác UTF-8

$unsafe_string = "<script>alert('XSS attack')</script>";

$safe_string = htmlspecialchars($unsafe_string, ENT_QUOTES, "ISO-8859-1");

Trong ví dụ trên, hàm htmlspecialchars() được gọi với 3 tham số, tham số thứ 2 là ENT_QUOTES để chuyển đổi cả dấu nháy đơn và nháy kép, tham số thứ 3 là “ISO-8859-1” để chuyển đổi chuỗi theo mã hóa ISO-8859-1.

Ví dụ 5: Chuyển đổi chuỗi trong vòng lặp

$unsafe_strings = array("<script>alert('XSS attack')</script>", "<h1>Hello World</h1>", "I'm a hacker");

foreach ($unsafe_strings as &$string) {

$string = htmlspecialchars($string);

}

Như vậy là các ví dụ sử dụng htmlspecialchars trong php, chú ý rằng các ví dụ trên chỉ là tham khảo chung, bạn cần phù hợp với tình huống thực tế của mình để sử dụng hàm này.

Kết luận 

htmlspecialchars() là một hàm quan trọng trong PHP, nó giúp bảo vệ website khỏi các tấn công XSS bằng cách chuyển đổi các ký tự &, “, ‘, < và > thành các dạng đặc biệt. Sử dụng hàm này trước khi hiển thị chuỗi hoặc lưu vào cơ sở dữ liệu, đặc biệt là khi xử lý dữ liệu từ người dùng.

Trong một số trường hợp cần chuyển đổi mã hóa ký tự khác UTF-8, hoặc chuyển đổi mảng chuỗi thì cần sử dụng hàm array_map() hoặc vòng lặp.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now