Hướng dẫn does mysqli_real_escape_string prevent sql injection? - mysqli_real_escape_string có ngăn chặn việc tiêm sql không?

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

Hướng dẫn does mysqli_real_escape_string prevent sql injection? - mysqli_real_escape_string có ngăn chặn việc tiêm sql không?

3

Xin vui lòng xem Meekrodb: http://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: http://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

Hướng dẫn does mysqli_real_escape_string prevent sql injection? - mysqli_real_escape_string có ngăn chặn việc tiêm sql không?

JeroenjeroenJeroen

5,8032 Huy hiệu vàng19 Huy hiệu bạc26 Huy hiệu đồng2 gold badges19 silver badges26 bronze badges

6

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.to try to ensure that the data that is sent to the mysql server is safe - it attempts to remove characters that are often used in 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.selective URL-encoding is also a valid way to by pass SQL injection filtering. Double-URL encoding sometimes works because Web applications sometimes decode user input more than once, and apply their input filters before the final decoding step.

MySQLI_REAL_ESCAPE_STRING có bị phản đối không?

Phần mở rộng này đã được không nhận được trong Php 5.5.0 và nó đã bị loại bỏ trong Php 7.0. 0, and it was removed in PHP 7.0.

Có thoát khỏi việc ngăn chặn SQL?

Chơi nhân vật thoát là một cách hiệu quả để ngăn ngừa tiêm SQL.Các nhân vật đặc biệt như là/ -;được SQL Server giải thích là cú pháp và có thể được coi là một cuộc tấn công tiêm SQL khi được thêm vào như một phần của đầu vào.. Special characters like “/ — ;” are interpreted by the SQL server as a syntax and can be treated as an SQL injection attack when added as part of the input.