2010-02-24 1 views
17

Tôi đang tìm liên kết hoặc câu trả lời ở đây, về cách định cấu hình đúng các quyền cơ sở dữ liệu để bảo mật ứng dụng Django? Để được rõ ràng, tôi đang tìm kiếm cụ thể cho vật chất đối phó với các khoản tài trợ trên cơ sở dữ liệu, không cho phép trong khuôn khổ Django chính nó.Cách cấu hình quyền cơ sở dữ liệu cho ứng dụng Django?

Trả lời

8

Tôi thường:

grant all privileges on my_db.* to [email protected] identified by 'my_user_pass' 
grant all privileges on test_my_db.* to [email protected] identified by 'my_user_pass' 

Tôi cho rằng nếu có một lỗi trong django, bạn có thể mở cơ sở dữ liệu của bạn lên đến những điều khủng khiếp, nhưng bạn muốn có những vấn đề khác nếu có là lớn của một an ninh lỗ trong django.

django tối thiểu cần chọn, chèn, cập nhật và xóa để hoạt động. Nếu bạn đang sử dụng thử nghiệm hoặc syncdb ở tất cả, bạn cũng sẽ cần để có thể tạo ra các bảng, và chỉ mục (và có thể cho phép tập tin để tải đồ đạc sql).

Vì vậy, đối với một db mysql, tôi đoán tập hợp quyền tối ưu có thể được chọn, chèn, cập nhật, xóa, tạo, chỉ mục và tệp. Nếu bạn muốn nhận được thực sự nitty-gritty, bạn có thể chọn lọc cấp các quyền này khi thích hợp ở cấp độ bảng (chứ không phải là mức db).

Cá nhân, tôi tìm thấy grant all ... dễ dàng hơn để nhập.

+0

Cảm ơn Seth. Tôi cũng làm vậy. Tuy nhiên, tôi đã tìm kiếm "thực sự nitty-gritty" khi bạn đặt nó.Tôi đã thấy một số thứ trên web một thời gian ngắn sau đó đã trình bày chi tiết điều này và có vẻ như cứng rắn đáng giá. Đáng tiếc là tôi đã không đánh dấu nó ... – emru

+1

Điều này không cần phải nói, nhưng sau khi ở trên: 'đặc quyền tuôn ra;' – mlissner

+0

@mlissner Bạn có thể giải thích lý do tại sao? –

-1

Mục đích của việc định cấu hình quyền trên cấp DB là gì? Nếu máy chủ của bạn bị xâm nhập thì kẻ tấn công sẽ có thể làm bất cứ điều gì với cơ sở dữ liệu của bạn (vì anh ta có thông tin đăng nhập/pass) và permissons sẽ không giúp được gì. Nếu máy chủ của bạn được bảo mật thì quyền sẽ vô dụng.

Quyền có thể có ý nghĩa nếu máy chủ DB của bạn có sẵn từ thế giới bên ngoài, nhưng bạn không nên làm như vậy.

+8

Bằng cách thêm quyền DB, bạn có cơ hội để giới hạn những gì có thể đạt được với một cuộc tấn công SQL injection etc. Nếu máy chủ web bị xâm phạm quyền truy cập DB có khả năng hạn chế thiệt hại - ví dụ: Có thể không có lý do gì để đăng nhập ứng dụng web có thể xóa cơ sở dữ liệu, vv .. – emru

+1

Việc tiêm SQL dễ dàng tránh với django và tôi không thấy sự khác biệt lớn giữa việc xóa tất cả các bảng và xóa cơ sở dữ liệu. Trong cả hai cách bạn có dữ liệu của bạn bị mất và nên khôi phục lại bất cứ điều gì từ bản sao lưu sau khi loại bỏ các lỗ hổng. Rõ ràng là các quyền mức DB làm cho dự án của bạn an toàn hơn. Tôi nghĩ rằng django không có hỗ trợ built-in cho DB cấp phép bởi vì nó tốt hơn để đặt nỗ lực trong việc sửa chữa các vấn đề thực sự: XSS, CSRF, SQL tiêm, vv và không đánh lừa mình với một nửa các biện pháp. –

+1

Đây là lời khuyên của Microsoft dành cho các ứng dụng ASP.NET "... Chỉ cấp quyền tối thiểu mà ứng dụng phải có chức năng". Và SANS "... Cách tiếp cận này chỉ nên cấp các quyền tối thiểu mà ứng dụng yêu cầu chạy." Etc Lỗi có thể ở bất kỳ cấp độ nào trong ngăn xếp ứng dụng - tại sao bạn không muốn sử dụng mọi công cụ có thể để ngăn chặn cuộc tấn công lan truyền. – emru

7

Từ các tài liệu django:

https://docs.djangoproject.com/en/dev/topics/install/

"Nếu bạn có kế hoạch để sử dụng lệnh syncdb manage.py của Django để tự động tạo bảng cơ sở dữ liệu cho các mô hình của bạn (sau khi đã cài đặt Django và tạo ra một dự án), bạn sẽ cần phải đảm bảo rằng Django có quyền tạo và thay đổi các bảng trong cơ sở dữ liệu bạn đang sử dụng, nếu bạn có kế hoạch tự tạo các bảng, bạn có thể chỉ đơn giản là cấp quyền Django SELECT, INSERT, UPDATE và DELETE. sẽ cần các đặc quyền ALTER TABLE trong quá trình syncdb nhưng sẽ không phát hành các câu lệnh ALTER TABLE trên một bảng khi syncdb đã tạo ra nó. với các quyền này, bạn sẽ chỉ định chi tiết trong tệp cài đặt của dự án, xem DATABASES để biết chi tiết. "

2

Tôi vừa thử nghiệm thiết lập ban đầu với MySQL. Đối với python manage.py migrate ít nhất bạn cần trợ cấp sau đây để thao tác đơn giản (nếu sử dụng db-chuẩn bị yo):

  1. CREATE, ALTER, INDEX
  2. SELECT, UPDATE, Inset, DELETE

Và, bằng cách cách - vấn đề an ninh. Bạn có thể giảm tác động tấn công bằng cách hạn chế phơi nhiễm hệ thống của bạn. Trong trường hợp này - bạn có thể hạn chế 'DROP' - đó là cộng thêm khá lớn. Nếu bạn để lại một số lỗ hổng khó khăn với khả năng chèn SQL - bạn có thể giảm thiệt hại. Tôi sẽ nghiên cứu trong tương lai nếu nó sẽ không làm hại gì để xóa từ khóa DELETE - điều đó cũng sẽ hạn chế các mối đe dọa tiềm năng. Chỉ vì tất cả chúng ta đều để lại các lỗi theo thời gian :)