2011-12-05 25 views
6

Vì vậy, nếu một số phần của mã dễ bị chèn vào sql, ít nhất người dùng không thể viết bất cứ thứ gì vào cơ sở dữ liệu nếu anh ta sử dụng giao diện người dùng mà không có quyền truy cập ghi toàn cục?Có thực hành bảo mật tốt để tách người dùng đọc và viết cho một cơ sở dữ liệu không?

+2

Sẽ không có phần nào của mã dễ bị tiêm SQL. Nếu bạn nghĩ một số thì thay đổi chúng. Hạn chế quyền đọc/ghi sẽ không đủ. – Ben

+0

Đó là một điểm tốt, nhưng trong trường hợp này tôi đang làm việc trên một số trang web asp cổ xưa về cơ bản không có sanitization hoặc bất cứ điều gì như thế, vì vậy trước khi đi vào sửa chữa kịch bản cổ tôi đã nghĩ đây có thể là một khởi đầu tốt – Yasser1984

Trả lời

5

Có, tôi cho rằng thực tiễn tốt là để người dùng kết nối bằng tài khoản chỉ cho phép các đặc quyền ít nhất họ cần để sử dụng trang web. Nếu người dùng web của bạn chỉ nên đọc dữ liệu từ cơ sở dữ liệu thì tôi chắc chắn sẽ tạo một tài khoản chỉ có quyền truy cập đọc và yêu cầu họ truy cập DB thông qua đó.

Điều quan trọng hơn là bảo mật ứng dụng web của bạn. Bạn vẫn có thể là nạn nhân của một cuộc tấn công SQL Injection tàn phá ngay cả khi người dùng không ghi vào cơ sở dữ liệu của bạn (nghĩ rằng số thẻ tín dụng hoặc mật khẩu bị đánh cắp).

+0

truy cập được khá nguy hiểm là tốt. – Yasser1984

6

Cách tiếp cận thường có vai trò khác nhau, không thực sự là người dùng. Theo như tấn công SQL injection, tôi sẽ tập trung vào việc sửa chữa vấn đề hoàn toàn thay vì giảm thiểu nó thông qua cách tiếp cận này bạn đề xuất.

2

Có, tuy nhiên có rất nhiều kỹ thuật thiết kế có thể giúp kiểm soát giao diện cơ sở dữ liệu và diện tích bề mặt của bạn.

Người ta phải giả định rằng mã thường sẽ sử dụng cùng một thông tin đăng nhập cho tất cả các hoạt động của nó trong một phiên cụ thể (đọc và viết). Tuy nhiên, nếu người dùng không phải là người dùng viết, thông tin đăng nhập được sử dụng cho phiên của anh ấy chắc chắn sẽ không có bất kỳ quyền ghi nào.

Một cách tốt để giảm diện tích bề mặt của bạn tiếp xúc với SQL injection là không có tài khoản đó có thể cập nhật bất kỳ bảng trực tiếp ở nơi đầu tiên.

Với ghi truy cập thông qua các procs được lưu trữ, ví dụ, việc tiêm duy nhất có thể xảy ra là thực hiện các quy trình đó với các tham số thích hợp.

+0

Vì vậy, các thủ tục sẽ phải chạy theo một người dùng khác với quyền ghi và chỉ có thể thực thi bởi người dùng "chỉ đọc". đó là một ý tưởng tốt quá Tôi chắc chắn mysql hỗ trợ đó, có lẽ phần còn lại làm là tốt. – Yasser1984

+0

@ user893730 Các thủ tục sẽ được thực thi cho vai trò người dùng ứng dụng. Thông thường những gì tôi muốn thấy là vai trò người dùng ứng dụng với các đặc quyền ít nhất: chọn trên các khung nhìn, thực hiện trên các thủ tục - không có gì khác. http://dev.mysql.com/doc/refman/5.6/en/grant.html Bạn có thể có EXECUTE trên một thói quen nhưng không có quyền đối với các đối tượng bên dưới nó. –

1

Phần lớn thời gian này là quá mức cần thiết, nhưng phần lớn thời gian bạn nên sử dụng truy vấn được tham số hóa mà không dễ bị tiêm SQL.

Cân nhắc sử dụng quy trình được lưu trữ và tài khoản người dùng chỉ có thể gọi thủ tục chứ không chạy trực tiếp truy vấn.

Nếu bạn cần sử dụng truy vấn trực tiếp và không thể sử dụng thông số vì lý do nào đó, thì có, bạn nên có tài khoản người dùng chỉ có thể đọc từ cơ sở dữ liệu khi có thể.

+0

Quốc phòng sâu, kế hoạch thất bại. Các lỗ hổng bảo mật đã được tìm thấy trong các thư viện truy vấn được tham số. – rook

2

Có. Ngoài câu trả lời hay của Abe và Cade Roux, nó có thể giúp các kiểm toán viên an ninh ưu tiên và làm cho pháp y dễ dàng hơn sau một cuộc tấn công.

Nó cho phép bạn tập trung kiểm tra bảo mật trên mã sử dụng nhiều đặc quyền hơn - bạn có thể dành nhiều thời gian kiểm tra mã cần quyền viết hơn mã cần quyền đọc và thậm chí nhiều thời gian hơn trên mã yêu cầu đặc quyền bảng thả.

Một thuộc tính tốt đẹp khác của việc tách vai trò là nó làm cho pháp y dễ dàng hơn. Nếu bạn có tách vai trò và có thể xác định cuộc tấn công trong nhật ký DB, bạn có thể thu hẹp mã nào có thể đã bị khai thác - chỉ mã đó sử dụng vai trò liên quan đến tấn công trong nhật ký.

1

Dường như ý tưởng của bạn về việc tiêm SQL đến từ truyện tranh ngớ ngẩn của Bobby Tables.
Nhưng trên thực tế, chỉ cần đọc từ cơ sở dữ liệu có thể thảm họa hơn viết.

Ngoài ra, tôi có cảm giác mạnh mẽ rằng NOBODY của những người tốt bụng đã nói "đó là thực hành tốt" đã sử dụng nó trong cuộc sống thực. Nói, một lối vào (trong cuộc sống thực, không phải ảo) cũng phải có quyền ghi.

Bạn đang sủa cây sai.
Nếu bạn có một số phần của mã dễ bị chèn ép sql - CHỈNH SỬA CÁC BỘ PHẬN NÀY. Đó là giải pháp duy nhất lành mạnh.

+0

Một chút khắc nghiệt nhưng yêu thích http://bobby-tables.com/ lool – Yasser1984

Các vấn đề liên quan