theo dõi

Gần nhất :

Thống kê câu hỏi

Chuyên mục : Lập trình
Topic : Php
Hỏi lúc:
Lượt xem: 2,687

Làm thế nào tôi có thể ngăn chặn SQL-injection trong PHP?

Dương Hoài Bắc Dương Hoài Bắc
 02  01  00
02 bình chọn hữu ích bởi Hoàng Thành Gia Ngô Hồng Điệp

Nếu người dùng nhập vào 1 đoạn text giống như 1 truy vấn sql, sau đó ứng dụng trở nên dễ bị SQL injection:

$unsafe_variable = $_POST['user_input']; 

mysql_query("INSERT INTO 'table' ('column') VALUES ('$unsafe_variable')");

Đó là vì người dùng có thể nhập: value'); DROP TABLE table;--

và truy vấn trở thành

INSERT INTO 'table' ('column') VALUES('value'); DROP TABLE table;--')

Mình có thể làm điều gì để ngăn chặn nó xảy ra? Thank all

2,687 xem 06 theo dõi 02 hữu ích hỏi –

Bạn biết ai đó có thể trả lời câu hỏi này?. Bạn có thể giúp đỡ bằng cách tìm những người giỏi nhất:

user user user user user

Lâm  Cường Lâm Cường
 12  00  04
06 bình chọn hữu ích bởi Lâm Cường, Huỳnh Hữu Nam Hồ Vĩnh Hải ... (tất cả)

có 1 số cách sau đây 

Kết nói database và sử dụng mysql_real_escape_string có thể tìm hiểu về hàm này tại php.net

Nếu mà trường hợp hacker muốn tấn công dựa trên id và $_GET ví dụ 

product.php?id=10  , nếu hacker cố ý injection vào đây thì bạn thử 

if(is_numeric($_GET['id']){
// chạy sql
}else{
//Trường hợp nếu hacker cố ý truyền vào 1 chuỗi ko phải 1 con số sẽ báo lỗi ở đây
}

Ngoài ra bạn có thể sử dụng RegularExpression ( Biểu thức chính quy ) 

ví dụ : 

if(preg_match("/^[0-9]+$/",$_GET['id']){
//chạy CSDL
}else{
//Nếu có ng` truyền 1 chuỗi thì báo lỗi
}

Nếu sử dụng RE thì sẽ linh động hơn, đồng thời bạn có thể truyền dữ liệu theo ý bạn

Ngoài ra bạn có thể sử dụng UrlRewrite để che đậy các liên kết của bạn , cách này chỉ che đậy tạm thời , nếu gặp các hacker tinh mắt thì vẫn có thể sqinjection được 

Ngoài ra bạn có thể sử dụng các Framework như CI, Laravel , Zend , Phalcon v..v để có thể an toàn hơn trước SQL Injection 

2,428 xem 06 hữu ích trả lời –
Thời  Nguyễn Thời Nguyễn
 06  00  09

Rất đơn giản. Bạn xem câu trả lời tại đây nhé

http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php

2,076 xem 00 hữu ích trả lời –