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?
Trả lời
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).
truy cập được khá nguy hiểm là tốt. – Yasser1984
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.
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.
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
@ 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ó. –
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ể.
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
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ý.
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.
Một chút khắc nghiệt nhưng yêu thích http://bobby-tables.com/ lool – Yasser1984
- 1. Cơ sở dữ liệu PHP/SQL truy vấn thực hành tốt và bảo mật
- 2. Cơ sở dữ liệu người dùng đơn và cơ sở dữ liệu nhiều người dùng
- 3. Một cơ sở dữ liệu người dùng phục vụ nhiều cơ sở dữ liệu ứng dụng
- 4. Cách tốt nhất để bảo mật chuỗi kết nối cơ sở dữ liệu là gì?
- 5. Làm thế nào để bảo mật dữ liệu người dùng trong cơ sở dữ liệu với Rails?
- 6. Cơ sở dữ liệu Upserts - Thực hành tốt hay xấu?
- 7. Bảo mật thông tin kết nối cơ sở dữ liệu
- 8. Sử dụng cơ sở dữ liệu mysql để xác thực người dùng trong bảo mật mùa xuân?
- 9. cách dễ nhất để mật khẩu bảo vệ cơ sở dữ liệu mongodb cho người dùng từ xa là gì?
- 10. Cách tìm tên người dùng và mật khẩu cho cơ sở dữ liệu mysql
- 11. Thực hành tốt cơ sở dữ liệu dàn dựng
- 12. Sử dụng mysqldump và người dùng cơ sở dữ liệu
- 13. Thực hành tốt nhất để lưu trữ tên người dùng và mật khẩu trong MySQL Databases
- 14. Thực hành tốt nhất cho cấu trúc cơ sở dữ liệu bình chọn bỏ phiếu
- 15. Cơ sở dữ liệu + Xác thực Windows + Tên người dùng/Mật khẩu?
- 16. Apache Shiro - sử dụng cơ sở dữ liệu để đọc người dùng, vai trò và quyền
- 17. Thực hành tốt nhất cho cơ sở dữ liệu trang web viết trong khi sao lưu lạnh?
- 18. Thực tiễn tốt nhất để lưu trữ mật khẩu cơ sở dữ liệu
- 19. Bảo mật xem Django và thực hành tốt nhất
- 20. Bảo mật/xác thực dữ liệu Lisp
- 21. FindBugs và bảo mật mật khẩu cơ sở dữ liệu vấn đề
- 22. Caching dữ liệu người dùng để tránh các chuyến đi cơ sở dữ liệu dư thừa
- 23. Sử dụng cơ sở dữ liệu quan hệ cho dữ liệu Schemaless - Thực tiễn tốt nhất
- 24. Truyền và bảo mật đúng mật khẩu của người dùng cho ứng dụng web
- 25. Có cách nào để cung cấp xác thực cho cơ sở dữ liệu riak không?
- 26. Sử dụng "người dùng cơ sở dữ liệu" để xác thực trong Ruby on Rails
- 27. Thiết kế cơ sở dữ liệu Thực tiễn tốt nhất
- 28. Cách xử lý cơ sở dữ liệu nhiều người dùng
- 29. Truy cập 2010 cho phép nhiều người dùng/Thực hiện bảo mật nhóm
- 30. Thực tiễn tốt nhất về cơ sở dữ liệu
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
Đó 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