MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Cách bảo vệ cơ sở dữ liệu MySQL hoặc MariaDB của bạn khỏi SQL Injection:Phần một

Bảo mật là một trong những yếu tố quan trọng nhất của môi trường cơ sở dữ liệu được thiết kế đúng cách. Có rất nhiều vectơ tấn công được sử dụng với SQL injection có lẽ là vectơ phổ biến nhất. Bạn có thể thiết kế các lớp phòng thủ trong mã ứng dụng nhưng bạn có thể làm gì trên lớp cơ sở dữ liệu? Hôm nay chúng tôi muốn chỉ cho bạn cách bạn có thể dễ dàng triển khai tường lửa SQL trên MySQL bằng ProxySQL. Trong phần thứ hai của blog này, chúng tôi sẽ giải thích cách bạn có thể tạo danh sách trắng các truy vấn được phép truy cập cơ sở dữ liệu.

Trước tiên, chúng tôi muốn triển khai ProxySQL. Cách dễ nhất để làm điều đó là sử dụng ClusterControl. Với một vài cú nhấp chuột, bạn có thể triển khai nó vào cụm của mình.

Xác định nơi triển khai nó, bạn có thể chọn máy chủ hiện có trong cụm hoặc chỉ cần ghi lại bất kỳ IP hoặc tên máy chủ nào. Đặt thông tin đăng nhập cho người dùng quản trị và giám sát.

Sau đó, bạn có thể tạo người dùng mới trong cơ sở dữ liệu để sử dụng với ProxySQL hoặc bạn có thể nhập một trong những cái hiện có. Bạn cũng cần xác định các nút cơ sở dữ liệu mà bạn muốn đưa vào ProxySQL. Trả lời nếu bạn sử dụng các giao dịch ngầm định hay không và bạn đã sẵn sàng triển khai ProxySQL. Trong vài phút, một ProxySQL với cấu hình được chuẩn bị dựa trên thông tin đầu vào của bạn đã sẵn sàng để sử dụng.

Do vấn đề của chúng tôi là bảo mật, chúng tôi muốn có thể cho ProxySQL biết cách xử lý các truy vấn không phù hợp. Chúng ta hãy xem xét các quy tắc truy vấn, cơ chế cốt lõi chi phối cách ProxySQL xử lý lưu lượng truy cập đi qua nó. Danh sách các quy tắc truy vấn có thể giống như sau:

Chúng đang được áp dụng từ ID thấp nhất trở đi.

Hãy thử tạo một quy tắc truy vấn sẽ chỉ cho phép các truy vấn CHỌN cho một người dùng cụ thể:

Chúng tôi đang thêm quy tắc truy vấn ở đầu danh sách quy tắc. Chúng tôi sẽ đối sánh bất kỳ thứ gì không phải là CHỌN (xin lưu ý Mẫu đối sánh Negate đã được bật). Quy tắc truy vấn sẽ chỉ được sử dụng khi tên người dùng là 'devuser'. Nếu tất cả các điều kiện đều phù hợp, người dùng sẽ thấy lỗi như trong trường "Bản tin lỗi".

[email protected]:~# mysql -u devuser -h 10.0.0.144 -P6033 -ppass

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 3024

Server version: 5.5.30 (ProxySQL)



Copyright (c) 2009-2019 Percona LLC and/or its affiliates

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.



Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



mysql> create schema myschema;

ERROR 1148 (42000): The query is not allowed

mysql> SELECT 1;

+---+

| 1 |

+---+

| 1 |

+---+

1 row in set (0.01 sec)



mysql> SELECT * FROM sbtest.sbtest1 LIMIT 1\G

*************************** 1. row ***************************

 id: 1

  k: 503019

  c: 18034632456-32298647298-82351096178-60420120042-90070228681-93395382793-96740777141-18710455882-88896678134-41810932745

pad: 43683718329-48150560094-43449649167-51455516141-06448225399

1 row in set (0.00 sec)

Một ví dụ khác, lần này chúng tôi sẽ cố gắng ngăn chặn các tai nạn liên quan đến tình huống Bobby Tables.

Với quy tắc truy vấn này, bảng 'sinh viên' của bạn sẽ không bị Bobby bỏ qua:

mysql> use school;

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A



Database changed

mysql> INSERT INTO students VALUES (1, 'Robert');DROP TABLE students;--

Query OK, 1 row affected (0.01 sec)



ERROR 1148 (42000): Only superuser can execute DROP TABLE;

Như bạn có thể thấy, Bobby không thể xóa bảng "sinh viên" của chúng tôi. Anh ta chỉ được đưa vào bảng một cách độc đáo.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB JSON_LENGTH () Giải thích

  2. Cách dễ dàng để triển khai một cụm MySQL Galera trên AWS

  3. Cách phát hiện xem giá trị có chứa ít nhất một chữ số trong MariaDB hay không

  4. Cách hoạt động của RPAD () trong MariaDB

  5. Khắc phục “ERROR 1222 (21000):Các câu lệnh SELECT đã sử dụng có một số cột khác nhau” khi sử dụng UNION trong MariaDB