Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tôi có vệ sinh / thoát hiểm đúng cách không?

Vì một số lý do, chúng tôi cũng cần thoát khỏi dấu gạch chéo ngược nữa.
Vì vậy, mã thích hợp sẽ là, tôi tin rằng

if(isset($_GET['q'])){
  $_GET['q'] = trim($_GET['q']);
  if(strlen($_GET['q']) >= 2){
    $q = $_GET['q'];
    $q = '%'.addCslashes($q, '\%_').'%';
    // now we have the value ready either for escaping or binding
    $q = mysql_real_escape_string($q);
    $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
    //or 
    $sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
    $stm = $pdo->prepare($sql);
    $stm->execute(array($q));
    $data = $stm->fetchAll();
  }
}

Đối với đầu ra, hãy sử dụng

echo htmlspecialchars($_GET['q']);

ở đây không cần đến dải băng.

Các dấu ngoặc kép sẽ không gây hại cho bảo mật của bạn nếu bạn không sử dụng chúng. Bộ ký tự
nguy hiểm trong trường hợp một số mã hóa cực kỳ hiếm gặp nhưng chỉ khi được đặt không đúng cách. if mysql(i)_set_charset hoặc DSN (trong trường hợp PDO) đã được sử dụng cho mục đích - bạn đã an toàn trở lại.

Đối với PDO, một wiki thẻ chắc là đủ cho người mới bắt đầu, tôi tin rằng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phân trang hồ sơ về vấn đề phía Khách hàng

  2. Cách viết truy vấn MySQL trong đó A chứa (a hoặc b)

  3. Đặt Rails lên trên cơ sở dữ liệu hiện có

  4. chèn hàng loạt giá trị danh sách với SQLAlchemy Core

  5. Làm cách nào để kết hợp AND và OR trong câu lệnh SQL của mình