Ai đó có thể cho tôi biết nếu nó an toàn hoặc nếu nó dễ bị tấn công SQL hoặc các cuộc tấn công SQL khác?
Không. Như URI2X nói, xem SQL Incation có khoảng mysql_real_escape_string[]
. As uri2x says, see SQL injection that gets around mysql_real_escape_string[]
.
Cách tốt nhất để ngăn ngừa tiêm SQL là sử dụng các câu lệnh đã chuẩn bị. Họ tách dữ liệu [tham số của bạn] khỏi các hướng dẫn [chuỗi truy vấn SQL] và không để lại bất kỳ chỗ nào cho dữ liệu làm ô nhiễm cấu trúc của truy vấn của bạn. Các tuyên bố chuẩn bị giải quyết một trong những vấn đề cơ bản của bảo mật ứng dụng.
Đối với tình huống mà bạn không thể sử dụng các câu lệnh đã chuẩn bị [ví dụ: LIMIT
], sử dụng danh sách trắng rất nghiêm ngặt cho từng mục đích cụ thể là cách duy nhất để đảm bảo bảo mật.
// This is a string literal whitelist
switch [$sortby] {
case 'column_b':
case 'col_c':
// If it literally matches here, it's safe to use
break;
default:
$sortby = 'rowid';
}
// Only numeric characters will pass through this part of the code thanks to type casting
$start = [int] $start;
$howmany = [int] $howmany;
if [$start < 0] {
$start = 0;
}
if [$howmany < 1] {
$howmany = 1;
}
// The actual query execution
$stmt = $db->prepare[
"SELECT * FROM table WHERE col = ? ORDER BY {$sortby} ASC LIMIT {$start}, {$howmany}"
];
$stmt->execute[['value']];
$data = $stmt->fetchAll[PDO::FETCH_ASSOC];
Tôi cho rằng mã trên miễn dịch với tiêm SQL, ngay cả trong các trường hợp cạnh tối nghĩa. Nếu bạn đang sử dụng MySQL, hãy chắc chắn rằng bạn đã tắt chuẩn bị.
$db->setAttribute[\PDO::ATTR_EMULATE_PREPARES, false];
Mã của tôi là:
SELECT * FROM tlb_members WHERE username="{mysqli_real_escape_string[$_GET['test']]}"
Tôi đang tìm kiếm và một số người cho biết sử dụng báo giá trong các câu lệnh SQL là an toàn. Điều này có đúng không?
Tim
29.1k7 Huy hiệu vàng95 Huy hiệu bạc120 Huy hiệu đồng7 gold badges95 silver badges120 bronze badges
Bạn không vệ sinh đúng cách tham số HTTP. Cách tốt duy nhất để ngăn ngừa tiêm SQL là sử dụng các truy vấn tham số hóa.Mar 7, 2016 at 6:14
3
Xin vui lòng xem Meekrodb: //meekro.com/ Điều này sẽ giúp bạn tạo ra các truy vấn khá an toàn và với tôi nó cũng dễ sử dụng hơn rất nhiều.
Hãy nhớ rằng những gì được coi là đủ an toàn ngày hôm nay, có thể thay đổi qua đêm. Không có những thứ như bảo mật 100%.
Đã trả lời ngày 7 tháng 3 năm 2016 lúc 6:28
- Jeroenjeroen
- 5,8032 Huy hiệu vàng19 Huy hiệu bạc26 Huy hiệu đồng
- Tại sao việc sử dụng mysqli_real_escape_string [] lại quan trọng như vậy?
- Mục đích của hàm mysqli_real_escape_string là cố gắng đảm bảo rằng dữ liệu được gửi đến máy chủ MySQL là an toàn - nó cố gắng loại bỏ các ký tự thường được sử dụng trong SQL Injection.
- Mã hóa URL có ngăn ngừa tiêm SQL không?
- Sử dụng mã hóa URL LƯU Ý: Bạn cũng nên xem xét rằng mã hóa URL chọn lọc cũng là một cách hợp lệ bằng cách lọc lọc tiêm SQL. Mã hóa đôi đôi khi hoạt động vì các ứng dụng web đôi khi giải mã đầu vào của người dùng nhiều lần và áp dụng các bộ lọc đầu vào của chúng trước bước giải mã cuối cùng.
- MySQLI_REAL_ESCAPE_STRING có bị phản đối không?
- Việc tìm điểm yếu trong mã của bạn sẽ dễ dàng hơn rất nhiều nếu bạn sử dụng các câu lệnh đã chuẩn bị [chỉ là grep cho các truy vấn có chứa các biến].
Đã trả lời ngày 7 tháng 3 năm 2016 lúc 8:35Mar 7, 2016 at 8:35
Tim timtim
29.1k7 Huy hiệu vàng95 Huy hiệu bạc120 Huy hiệu đồng7 gold badges95 silver badges120 bronze badges
Bạn không vệ sinh đúng cách tham số HTTP. Cách tốt duy nhất để ngăn ngừa tiêm SQL là sử dụng các truy vấn tham số hóa.
Xin vui lòng xem Meekrodb: //meekro.com/ Điều này sẽ giúp bạn tạo ra các truy vấn khá an toàn và với tôi nó cũng dễ sử dụng hơn rất nhiều.
Hãy nhớ rằng những gì được coi là đủ an toàn ngày hôm nay, có thể thay đổi qua đêm. Không có những thứ như bảo mật 100%.
Đã trả lời ngày 7 tháng 3 năm 2016 lúc 6:28Mar 7, 2016 at 6:28
JeroenjeroenJeroen
5,8032 Huy hiệu vàng19 Huy hiệu bạc26 Huy hiệu đồng2 gold badges19 silver badges26 bronze badges
6