Mysql_real_escape_string là gì

  -  
Trong tất cả các các loại tấn công nhằm vào các trang web hiện này thì SQL Injection là một trong những loại tấn công gian nguy và thông dụng nhất, nó đã gây thiệt sợ hãi không nhỏcho các doanh nghiệp với tổ chức trong nhiều năm quay lại đây. Trước lúc tìm biện pháp bảo về website của chúng ta trước nó thì cần phải tìm hiểu xem liệu nó là gì và biện pháp nó vận động ra sao.Tóm lại, SQL injection - nói một cách khác tắt là SQLi - thực hiện những lỗ hổng trong số input nguồn vào của trang web để nhằm mục tiêu mục đích tổn hại cho trang web của chúng ta. Rõ ràng là chúng nhờ vào các câu lệnh SQL để đánh cắp tin tức nhạy cảm của tín đồ dùng, biến hóa cơ sở dữ liệu, ngăn cản sự buổi giao lưu của hệ thống... Vào trường phù hợp xấu nhất có thể xảy ra thì nó hoàn toàn có thể chiềm quyền thực hiện cơ sở tài liệu của họ . (RIP me).Dưới đó là những gì mà mình nghĩ rằng bạn cần phải biết về SQL injection và làm sao để đảm bảo trang web của khách hàng chống lại nó. (Hi vọng với những tin tức mình cung cấp hoàn toàn có thể "make your trang web better" ).

Bạn đang xem: Mysql_real_escape_string là gì

SQL Injection tiến công như nào?

Biết bạn biết ta - trăm trận trăm win - Tôn tửSQL injection (gọi là SQLi cho ngắn vậy) được tổ chức (organized) bằng cách gửi các lệnh SQL độc hạiđến các máy chủ đại lý dữ liệu trải qua các request mà website bạn mang đến phép, lấy ví dụ như các lệnh đăng nhập. Bất kì những đầu vào trang web của người tiêu dùng ( các thẻ input, những query string, cookies và files ) để hoàn toàn có thể được thực hiện để gửi những mã độc.Để xem những mà nó làm cho việc, bạn có thể nhìn vào form đăng nhập dưới đây. Nó bao hàm hai đầu vào để nhập username với password, một nút submit nhằm gửi dữ liệu.
*
Khi người tiêu dùng nhập thông tin đăng nhập cùng bấm login, thông tin của người dùng sẽ được giữ hộ một tới servert thông sang một POST request tiếp nối sẽ được gán vào một câu lệnh SQL. Đoạn code đó sẽ trông như này:$sql_command = "select * from users where username = "" . $_POST<"username">; $sql_command .= "" and password = "" . $_POST<"password"> . """; Đoạn code này sẽ tiếp nối sẽ được lên máy chủ cơ sở dữ liệu. Hiệu quả trả về củanó sẽ chất vấn được người tiêu dùng nhập vào gồm hợp lệ hay có phải là người tiêu dùng trong hệ thống hay không?. Một lấy ví dụ như là người tiêu dùng có username là "john" và password là "123456" (đừng bao giờ dùng password này) thì đoạn mã trên sẽ đưa thành đoạn SQL như sau:SELECT * FROM users WHERE username="john" và password="123456" Đấy là ngôi trường hợp người dùng nhập tin tức hợp lệ (ở đây tức là họ nhập đúng đắn username chỉ bao hàm chữ hoặc số ...) Vậy thì điều gì xảy ra khi tham gia học nhập thông tin như bên dưới:Kết trái của đoạn code phía mặt trên hiện giờ sẽ được biên dịch thành như này:SELECT * FROM users WHERE username="john" OR 1=1; -- " và password="123456" Phần kiểm tra password đã bị bình luận lại. Kết quả trả về vẫn là tin tức của người tiêu dùng có username là "john" mà không quan trọng phải biết mật khẩu.Bằng thủ thuật này thì ta đã bao gồm quyền quy cập của người dùng mà chỉ nên biết username của fan đó.Đây là giữa những ví dụ điển hình nổi bật và đơn giản và dễ dàng nhất của SQLi. Bởi một vài thủ pháp thì tín đồ dùng rất có thể thêm, sửa thậm chí là là xóa các người tiêu dùng trong hệ thống. Học có thể đánh cắp toàn cục thông tin người tiêu dùng chỉ bởi một đoạn lệnh khôn cùng ngắn.Trong trường đúng theo xấu hơn, khi mà liên kết đến máy chủ cơ sở dữ liệu được tạo thành (và kiểm soát) vì một thông tin tài khoản admin (giống như tài khoản root vào MySQL ), kẻ tấn công hoàn toàn có thể làm những điềuhơn thế. Hắn hoàn toàn có thể sử dụng lỗ hổng SQLi để tạo tài khoản người tiêu dùng trên máy chủ bị tấn công, kích hoạt công dụng Remote Desktop, cấu hình thiết lập SMB chia sẽ những thư mục và tải lên các mã độc khác.

Vậy làm rứa nào để đảm bảo an toàn khỏi tấn công SQL Injection?

Với mỗi một kênh nguồn vào ( đầu vào element, file, cookies ...) sẽ tương ứng với một kiểu tiến công SQLi. Cách tốt nhất để đảm bảo khỏi tấn công SQLi là kiểm soát điều hành các tài liệu đầu vào website của bạn.Dưới trên đây sẽ là 1 trong vài phương thức hữu ích để bảo đảm rằng input người tiêu dùng nhập vào là an toàn:

Nguyên tắc 1: Đừng khi nào tin vào thông tin người dùng nhập vào.

Xem thêm: Kennen Siêu Nhân "Nổi Bần Bật" Nhờ Trang Phục Mới, Thông Tin, Độ Hiếm, Giá Skin

Nguyên tắc đầu tiên cũng là lớn số 1 về input người tiêu dùng nhập cùng là "don"t trust & verify" - nó tức là tất cả các form từ người dùng nhập lên rất cần phải được kiểm chăm bẵm một bí quyết nghiêm chỉnh. Nó không chỉ bao hàm những đầu vào boxes như hình dáng textarea hay input đầu vào text nhưng mà nó còn bao gồm rất nhiều những khác ví dụ như hidden input, query string parameters, cookies và file uploads.Không đề xuất là browser của chúng ta không đến phép thay đổi các thông tin mà ta giữ hộ đi thì ta không thể chuyển đổi nó. Bao gồm một tool thương hiệu là Burp Suitecho phép tín đồ dùng rất có thể capture lại HTTP request và biến đổi nó, thêm những hidden input trước lúc gửi nó đến server. Và nếu khách hàng nghĩ rằng mình thông minh bằng cách sử dụng Base64 để mã hóa dữ liệu của chính mình thì nó hoàn toàn có thể giải mã một biện pháp dễ dàng, sửa đổi cùng tái mã hóa.

Nguyên tắc 2 : Validate tài liệu trên hệ thống side.

Validation là quá trình để bảo đảm an toàn dữ liệu người dùng gửi lên là hòa hợp lệ. Ví dụ nghỉ ngơi trong PHP, bạn có thể dùng hàmmysql_real_escape_string() để loại bỏ những kí tự rất có thể gây ảnh hưởng đến câu lệnh SQL.Đoạn code thứ nhất sẽ sửa thành như này:$con=mysqli_connect("localhost","user","password","db");$username = mysqli_real_escape_string($con, $_POST<"username">); $password = mysqli_real_escape_string($con, $_POST<"password">); $sql_command = "select * from users where username = "" . $username; $sql_command .= "" and password = "" . $password . """; Edit một chút đã giúp bảo vệ code của bọn họ trước tấn công SQLi bằng cách thêm vào kí tự() trước những dấu nháy 1-1 mà người tiêu dùng có ý thêm vào.

Xem thêm: Choáng Với Đội Hình Fifa Online 3 Chuẩn, Các Đội Hình Trong Fifa Online 3

Một số lưu ý về tính toán:Nếu chúng ta đã thêm vấn đề validate tài liệu ở client side thì fan dùng rất có thể pass quanhững validation phía client side bằng những sửa các mã HTML họ nhận ra hay tắt những javascript sinh sống phía client đi.Trong một trong những ngôn ngữ lập trình, ví dụ như ASP.NET, bao hàm các tính năng auto xem xét các dữ liệu nguồn vào và sử dụng những bộ thanh lọc để loại bỏ nó. Nhưng vấn đề này vẫn có thể bị tin tặc lách qua nếu đủ tinh tế. Cho dù sao thì câu hỏi kiểm tra dữ liệu đầu vào cũng chẳng lúc nào là điều quá cẩn trọng cả.

Nguyên tắc 3: sử dụng command parameters

Một lựa chọn tốt hơn nhằm chông tấn công SQLi là sử dụng placeholder nhằm giữ nơi trong câu lệnh SQL sau đây khi người tiêu dùng nhập tài liệu thì đang điền đầy vào đó.Ví dụ về đoạn code sau:SqlCommand cmd = new SqlCommand ("SELECT * FROM users WHERE username=