Hàm addslashes() trong PHP

Hàm addslashes() trong PHP
Hàm addslashes() trong PHP

Chức năng của Hàm addslashes() trong PHP

Hàm addslashes() trong PHP dùng để thêm dấu gạch chéo ngược trước các ký tự mặc định đặc biệt để bảo mật khi làm việc với cơ sở dữ liệu, các ký tự mặc định đó là dấu nháy đơn ('), dấu nháy kép ("), dấu gạch chéo ngược (\), và ký tự NULL (Ví dụ: \x00), hàm trả kết quả về chuỗi mới mà không làm thay đổi chuỗi gốc.

Cú pháp của Hàm addslashes() trong PHP

$chuỗi_mới = addslashes("chuỗi_gốc");

chuỗi_gốc: Chuỗi gốc.

$chuỗi_mới: Kết quả trả về chuỗi mới mà không làm thay đổi chuỗi gốc.

Ví dụ Hàm addslashes() trong PHP

<?php
echo addslashes("Kiểm tra 'dấu nháy đơn'"); // Kết quả: Kiểm tra \'dấu nháy đơn\'
echo "<br>";

echo addslashes('Kiểm tra "dấu nháy kép" '); // Kết quả: Kiểm tra \"dấu nháy kép\"
echo "<br>";

echo addslashes("Kiểm tra (\) dấu gạch chéo ngược "); // Kết quả: Kiểm tra (\\) dấu gạch chéo ngược
echo "<br>";

echo addslashes("Kiểm tra ký tự NULL \x00"); // Kết quả: Kiểm tra ký tự NULL \0
echo "<br>";
?>

Kết quả:

Kiểm tra \'dấu nháy đơn\'
Kiểm tra \"dấu nháy kép\"
Kiểm tra (\\) dấu gạch chéo ngược
Kiểm tra ký tự NULL \0

Chạy Thử

Những lưu ý khi sử dụng Hàm addslashes() trong PHP

addslashes() hữu ích khi cần thêm dấu gạch chéo ngược vào một số ký tự đặc biệt trong chuỗi. Tuy nhiên, việc thêm dấu \ không đồng nghĩa dữ liệu đã được xử lý an toàn trong mọi trường hợp. Đặc biệt khi dữ liệu được đưa vào câu lệnh SQL, cần chọn phương pháp xử lý phù hợp với loại cơ sở dữ liệu và thư viện đang sử dụng.

addslashes() có bảo mật cho câu lệnh SQL không?

addslashes() không nên được xem là giải pháp chống SQL Injection. Hàm chỉ xử lý một số ký tự trong chuỗi theo quy tắc của PHP, trong khi cách cơ sở dữ liệu diễn giải dữ liệu có thể khác nhau.

Ví dụ, không nên xây dựng câu lệnh SQL bằng cách nối trực tiếp dữ liệu người dùng rồi dùng addslashes() để cố gắng làm sạch chuỗi:

<?php
$username = addslashes($_POST['username']);

$sql = "SELECT * FROM users WHERE username = '$username'";
?>

Cách làm này dễ tạo cảm giác dữ liệu đã an toàn nhưng thực tế không cung cấp cơ chế bảo vệ đáng tin cậy cho truy vấn. Với các thao tác SQL, nên sử dụng prepared statement để tách dữ liệu khỏi cấu trúc câu lệnh thay vì tự chèn ký tự thoát vào chuỗi.

Khi nào không nên sử dụng addslashes()?

Không nên dùng addslashes() như một bước xử lý mặc định cho mọi dữ liệu đầu vào. Hàm không phải công cụ xác thực dữ liệu, không thay thế việc kiểm tra kiểu dữ liệu và cũng không phải phương pháp mã hóa nội dung.

Đặc biệt, nếu dữ liệu chuẩn bị được đưa vào SQL, HTML, JavaScript hoặc một ngữ cảnh khác, cần sử dụng phương pháp xử lý tương ứng với ngữ cảnh đó. Chẳng hạn, dữ liệu hiển thị ra HTML cần được escape theo HTML, còn dữ liệu truy vấn SQL nên được truyền qua cơ chế tham số hóa.

Việc dùng addslashes() một cách tùy tiện còn có thể khiến chuỗi bị thêm dấu gạch chéo không cần thiết. Điều này gây khó khăn khi dữ liệu được lưu trữ, hiển thị hoặc xử lý lại ở bước tiếp theo.

Nên dùng phương pháp nào thay thế addslashes()?

Nếu làm việc với MySQL thông qua PDO, nên ưu tiên prepared statement và truyền giá trị thông qua tham số. Cách này giúp dữ liệu được xử lý riêng với cấu trúc câu SQL:

<?php
$stmt = $pdo->prepare(
    'SELECT * FROM users WHERE username = :username'
);

$stmt->execute([
    'username' => $username
]);
?>

Đối với dữ liệu cần hiển thị trên trang web, nên chọn hàm escape phù hợp với HTML thay vì dùng addslashes(). Còn với dữ liệu nhận từ biểu mẫu, cần kết hợp kiểm tra dữ liệu, giới hạn giá trị hợp lệ và xử lý theo đúng nơi dữ liệu được sử dụng.

Như vậy, addslashes() vẫn có thể hữu ích trong những tình huống xử lý chuỗi cụ thể, nhưng không nên dùng nó như một lớp bảo mật chung cho ứng dụng PHP. Chọn đúng phương pháp xử lý theo từng ngữ cảnh sẽ giúp mã nguồn rõ ràng và an toàn hơn.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm addslashes() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm addslashes() trong PHP
Email, Điện thoại 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 *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !