Mysql_real_escape_string có an toàn không?

mysql_real_escape_string[] có cung cấp đủ khả năng bảo vệ để ghi dữ liệu do người dùng gửi vào cơ sở dữ liệu một cách an toàn mà không cần xác thực thêm không?


Tôi biết điều này có thể gây ra sự cố nếu/khi dữ liệu được truy xuất và hiển thị cho người dùng, nhưng hiện tại tôi chủ yếu lo ngại liệu mã này có an toàn theo quan điểm của các cuộc tấn công tiêm chích MySQL hoặc PHP hay không

Ví dụ tôi muốn nhập cổ điển. 1' hoặc '1'='1 trong một biến được đóng gói bởi hàm mysql_real_escape_string

Có thể không?

CHỈNH SỬA. ngay cả SQLMAP cũng không làm được

root@osboxes. /var/www/html# sqlmap -u "http. //192. 168. 1. 1/DVWA/vulnerabilities/sqli/#" --cookie="security=medium;

[. ]

[11. 06. 43] [CRITICAL] tất cả các thông số được thử nghiệm dường như không thể tiêm được. Cố gắng tăng các giá trị '--level'/'--risk' để thực hiện nhiều thử nghiệm hơn. Ngoài ra, bạn có thể thử chạy lại bằng cách cung cấp một giá trị hợp lệ cho tùy chọn '--string' [hoặc '--regexp'] Nếu bạn nghi ngờ rằng có một số loại cơ chế bảo vệ liên quan [e. g. WAF] có thể bạn có thể thử lại với tùy chọn '--tamper' [e. g. '--tamper=space2comment']
[11. 06. 43] [CẢNH BÁO] Mã lỗi HTTP được phát hiện trong quá trình chạy.
404 [Không tìm thấy] - 222 lần

[*] đóng cửa lúc 11 giờ. 06. 43

 

Đã chỉnh sửa 17 Tháng Sáu, 2016 bởi tot94

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 17 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 17 tháng 6 năm 2016

Không. Toàn bộ điểm của chức năng là để ngăn chặn tiêm. Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

Broti

Đăng ngày 17 tháng 6 năm 2016

Broti

  • thành viên tích cực
    • 233
  • Giới tính. Nam
  • Vị trí. Đức
  • Sở thích. 8 Bit, Bảo mật CNTT, Âm nhạc, Mã hóa, Kỹ thuật đảo ngược, Mật mã

    • Chia sẻ

Đăng ngày 17 tháng 6 năm 2016

53 phút trước, digininja said

Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn

Đó sẽ giống như địa ngục trần gian đối với webhoster/webmins

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 20 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 20 tháng 6 năm 2016 [đã chỉnh sửa]

Ngày 17/6/2016 lúc 5. 31 giờ chiều, digininja said

Không. Toàn bộ điểm của chức năng là để ngăn chặn tiêm. Nếu ai đó tìm thấy một đường vòng thì nó sẽ mở ra nhiều lỗ hổng trong rất nhiều ứng dụng và nó sẽ được vá trong vòng vài giờ nếu không muốn nói là nhanh hơn

Có nhưng nếu nó ở mức "Trung bình" trên DVWA, điều đó có nghĩa là nó có thể bị bỏ qua?

CHỈNH SỬA. Tôi đã bỏ qua chức năng trốn tránh này thành công nhưng tôi không biết tại sao

Đây là SQLi gốc tôi muốn vượt qua

1' HOẶC '1'='1

Tôi mã hóa khoảng trắng và bằng ở dạng thập lục phân nhưng không phải dấu nháy đơn và nó hoạt động [http. //www. bảng ascii. com/]

SQLi được mã hóa. 1%20OR%201%3D1

Câu hỏi của tôi là như sau. tại sao SQLi hoạt động ngay cả khi tôi không có dấu nháy đơn?

Có phải vì bình đẳng và không gian không bị ảnh hưởng bởi my_real_escape_string[] ?

Cf. http. //php. net/thủ công/vi/chức năng. mysql-real-escape-chuỗi. php

mysql_real_escape_string[] gọi hàm thư viện của MySQL mysql_real_escape_string, hàm này thêm dấu gạch chéo ngược vào các ký tự sau. \x00, \n, \r, \, ', " và \x1a.

Được chỉnh sửa 20 Tháng Sáu, 2016 bởi tot94

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 20 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 20 tháng 6 năm 2016

Đây là hai dòng mã quan trọng

$id = mysql_real_escape_string[ $id ];

$query = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

Vì vậy, nếu bạn tiêm

1 or 1=1

thì câu lệnh được tạo thành là.
 

SELECT first_name, last_name FROM users WHERE user_id = 1 or 1=1;

đó là một câu lệnh hợp lệ và trả về tất cả các hàng vì boolean true ở cuối [1=1]

Lý do điều này có thể vượt qua chức năng thoát là vì không có gì trong đó cần thoát

Nếu truy vấn giống như

$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

Sau đó, bạn sẽ cần thoát ra khỏi các trích dẫn đơn và khi bạn chuyển chúng vào id của mình, chúng sẽ bị thoát và bạn sẽ không thể thực hiện được

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 21 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 21 tháng 6 năm 2016

vâng chính xác. Tôi cố gắng thoát khỏi thứ mà tôi không cần phải làm, hơn nữa tôi không phải mã hóa mySQL

Cấp thấp

$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

Mức trung bình.  

 $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";

Vì vậy, ở cấp độ trung bình, giá trị của chúng tôi không được bao quanh bởi dấu ngoặc kép, vì vậy chúng tôi không đặt dấu ngoặc kép. ]

Nhưng nếu mức độ trung bình là

$id = mysql_real_escape_string[ $id ];
$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

Không thể tạo SQLi?

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 21 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 21 tháng 6 năm 2016

Tôi sẽ không bao giờ nói là không thể nhưng trong những trường hợp bình thường sẽ không thể thoát ra khỏi các trích dẫn đơn mà bạn cần trích dẫn đơn của riêng mình trong id nhưng nếu bạn làm điều đó thì chuỗi thoát sẽ có dấu gạch chéo phía trước

________số 8

sẽ trở thành

id = " \' or 1=1"

cái sẽ giữ bạn bên trong biến

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 22 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 22 tháng 6 năm 2016

Có nên gần như không thể;]

Cảm ơn một lần nữa cho lời giải thích rõ ràng của bạn digininja. ]

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 22 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 22 tháng 6 năm 2016

Đây là nơi nhận xét của tôi về việc nếu chuỗi thoát không thành công thì đó là một ngày tồi tệ. Trong ví dụ này, về cơ bản, nó đang dừng việc tiêm nhưng nếu có thể bỏ qua thì mọi thứ dựa vào nó [nếu không dựa vào nó thì có lẽ nó đã được tiêm rồi] sẽ trở thành có thể tiêm được

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 24 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 24 tháng 6 năm 2016

Hmm tôi không hiểu bạn giải thích

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 24 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 24 tháng 6 năm 2016

Chức năng chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, nếu nó không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 27 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 27 tháng 6 năm 2016

Có nhưng "nếu thất bại" không nên được xem xét với chức năng như vậy phải không?

Tuy nhiên, tôi biết rằng có một bước củng cố khác có thể được thực hiện

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 27 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 27 tháng 6 năm 2016

Trích dẫn

Có nhưng "nếu thất bại" không nên được xem xét với chức năng như vậy phải không?

Không chắc chắn những gì bạn có ý nghĩa

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

đá

Đăng ngày 28 tháng 6 năm 2016

đá

  • thành viên tích cực
    • 106

  • Tác giả

    • Chia sẻ

Đăng ngày 28 tháng 6 năm 2016

Ngày 24/6/2016 lúc 3. 01 giờ chiều, digininja said

Chức năng chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, nếu nó không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet

ý bạn là

Hàm chuỗi thoát đang bảo vệ câu lệnh khỏi bị khai thác, "hàm chuỗi thoát" không thành công thì câu lệnh sẽ không còn được bảo vệ. Hãy tưởng tượng điều này trên toàn bộ internet

Mà tôi trả lời

Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

digininja

Đăng ngày 28 tháng 6 năm 2016

digininja

  • Người điều hành toàn cầu
    • 3. 9k
  • Giới tính. Nam
  • Vị trí. Sheffield, Vương quốc Anh
  • Sở thích. Xâm nhập, mã hóa, leo núi

    • Chia sẻ

Đăng ngày 28 tháng 6 năm 2016

Tôi vẫn không hiểu điều này có nghĩa là gì, tôi nghĩ rằng bạn đang mất một cái gì đó trong bản dịch

 

Trích dẫn

Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?

 

Liên kết để bình luậnChia sẻ trên các trang web khác

Nhiều tùy chọn chia sẻ hơn

Jason Cooper

Đăng ngày 28 tháng 6 năm 2016

Jason Cooper

  • thành viên chuyên dụng
    • 520
  • Giới tính. Nam
  • Vị trí. Vương quốc Anh
  • Sở thích. Thẻ, Máy tính, Mật mã, Hacking, Chọn khóa, Lập trình, v.v.

    • Chia sẻ

Đăng ngày 28 tháng 6 năm 2016

2 giờ trước tot94 said

Có nhưng "nếu câu lệnh chuỗi thoát không thành công" không nên được xem xét với chức năng như vậy phải không?

Bạn phải luôn xem xét điều gì sẽ xảy ra nếu một chức năng/câu lệnh không thành công, cả từ quan điểm bảo mật và quan điểm độ tin cậy. Sau đó, bạn cần xem xét khả năng hàm/câu lệnh sẽ thất bại là bao nhiêu. Đối với những thứ như mysql_real_escape_string, tác động của việc nó bị lỗi là rất cao và khả năng nó bị lỗi có thể là trung bình. Sau khi đưa ra phán quyết này, bạn hãy xem liệu có cách nào tốt hơn không [gợi ý, hãy đọc các truy vấn tham số hóa]

Tôi có nên sử dụng mysqli_real_escape_string không?

Tôi có cần sử dụng mysqli_real_escape_string khi sử dụng các câu lệnh chuẩn bị sẵn trong PHP không? . Cách nó từng hoạt động là bạn sẽ lấy dữ liệu đầu vào từ biểu mẫu, đặt dữ liệu đó vào một biến và đưa dữ liệu đó vào truy vấn MySQL của bạn để thêm dữ liệu đó vào cơ sở dữ liệu. The simple answer is no. The way it used to work is that you would take form input data, put that into a variable, and inject that data into your MySQL query in order to add that data to the database.

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

Tiện ích mở rộng này không được dùng trong PHP 5. 5. 0 và nó đã bị xóa trong PHP 7. 0 .

Thoát có bảo vệ chống lại SQL injection không?

Thoát ký tự là một cách hiệu quả để ngăn chặn SQL injection . Các ký tự đặc biệt như “/ — ;” .

Công dụng của hàm mysqli_real_escape_string[] là gì?

Hàm mysqli_real_escape_string[] được sử dụng để thoát khỏi các ký tự trong một chuỗi, khiến cho việc sử dụng nó trong câu lệnh SQL là hợp pháp .

Chủ Đề