Ý nghĩa các hàm addslashes, mysql_real_escape_string, htmlspecialchars

Các hàm trên thuộc về nhóm hàm, chúng ta dùng để bảo mật/ bảo vệ website. Một dữ liệu khi được thêm vào database có thể có 2 khả năng xấu như sau:


- Một là: dữ liệu đó có chứa các kí tự đặc biệt (ví dụ như dấu ‘ , ” , /, …) làm cho câu query của chúng ta bị lỗi cú pháp.

Ví dụ:
$bien = ‘Cái gì” đây ta’;
mysql_query(“select * from news where title=’$bien’ “);

==> Rõ ràng trong $bien có chứa dấu “, nên khi đưa vào câu query sẽ làm cho câu query bị lỗi cú pháp.

Do đó trong trường hợp này, ta cần phải có hàm để xử lý các biến trước khi đưa vào câu query. Và ứng cử viên sáng giá hiện giờ là: addslashes, mysql_real_escape_string

+ Phân biệt addslashes, mysql_real_escape_string:
* Thông thường các hệ quản trị cơ sở dữ liệu (HQTCSDL) đều có hàm xử lý kí tự đặc biệt, nên php chỉ cần chuyển qua cho HQTCSDL

Đối với Mysql thì khi ta gọi hàm mysql_real_escape_string thì php sẽ chuyển xuống cho mysql xử lý (do đó trước khi dùng hàm này, phải gọi hàm mysql_connect)
Đối với PostgreSql thì khi ta gọi hàm pg_escape_string thì php sẽ chuyển xuống cho PostgreSql xử lý

* Đối với các HQTCSDL không có hàm xử lý các kí tự đặc biệt thì ta sẽ dùng chính php để xử lý, thông qua hàm addslashes

- Hai là: dữ liệu đó không làm ảnh hưởng đến cú pháp của câu query, được thêm vào bình thường, nhưng khi hiển thị lên, nó làm cho tài liều html của chúng ta bị lỗi cú pháp.

Ví dụ:
$tieude = ‘Hướng dẫn cách sử dụng thẻ div’;
$noidung = ‘Thẻ div viết đầy đủ là

, đây là một loại thẻ có mặt trong tất cả website’;
mysql_query(“insert into news(title, body) values (‘$tieude’, ‘$noidung’)”);

==> Bạn hãy quan sát $noidung, nó có chứa

, rõ ràng khi hiện thị ra ngoài website, chung với nội dung html của chúng ta, vô tình nó trở thành một element trong cây html của chúng ta, và hiện tại nó đang bị thiếu thẻ đóng
, làm cho cấu chúng html của chúng ta không còn hợp lệ. Những trường hợp nặng hơn, có thể làm cho cả website của chúng ta bị chạy lung tung!!!

Và ứng cử viên được đề cử cho  trường hợp này là hàm htmpspecialchas. Hàm này sẽ thay thế dấu < thành  < và dấu > thành > . Khi đó về mặt nội dung sẽ là:

$noidung = ‘Thẻ div viết đầy đủ là

, đây là một loại thẻ có mặt trong tất cả website’;

Nhưng khi show lên website thì:  ‘Thẻ div viết đầy đủ là

, đây là một loại thẻ có mặt trong tất cả website’; (do các trình duyệt có khả năng hiểu mã html)



Bài viết khác


Trao đổi nhanh với chúng tôi


Trang chủ
  • Blog
  • Ý nghĩa các hàm addslashes, mysql_real_escape_string, htmlspecialchars
  • Sản phẩm