DỪNG LẠI
Chèn vào cơ sở dữ liệu trực tiếp từ bài viết luôn là một ý tưởng tồi. Đây là lý do mà PHP hiện đang mắc kẹt với những câu trích dẫn ma thuật rất thiếu trực quan.
Ít nhất bạn nên sử dụng mysql_real_escape_string () để thoát dữ liệu của mình. Ví dụ:
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
$query = "INSERT INTO users VALUES (
'" . mysql_real_escape_string($_POST["username"]) . "',
'" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
'" . mysql_real_escape_string($_POST["email"]) . "',
'2'
)";
mysql_query($query);
Lý do bạn phải làm điều này là dựa trên bảo mật. Ví dụ:nếu một số độc hại đặt trường tên người dùng thành '); DROP TABLE users;
mà không cần thoát dữ liệu của bạn trước. Cuối cùng bạn sẽ chạy một cách mù quáng truy vấn sau:
INSERT INTO users VALUES (''); DROP TABLE users;
Tất nhiên, điều nào sẽ không kết thúc tốt đẹp cho ứng dụng của bạn.
Đây là mức tối thiểu bạn nên làm.
Trên thực tế, bạn thực sự nên chuyển sang MySQLi Đây là một giao diện MySQL hiện đại hơn nhiều. Đây là một ví dụ
$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');
$query = "INSERT INTO users VALUES (
'" . $mysqli->real_escape_string($_POST["username"]) . "',
'" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
'" . $mysqli->real_escape_string($_POST["email"]) . "',
'2'
)";
$mysqli->query($query);
Bạn thậm chí có thể sử dụng MySQL theo kiểu thủ tục. Vì vậy, nếu lập trình hướng đối tượng chưa nằm trong tầm với của bạn, bạn sẽ không gặp vấn đề gì với MySQLi.
Hy vọng điều đó sẽ hữu ích.