2012-10-11 40 views
9

Tôi biết rằng câu hỏi How do I secure my database connection credentials? đã được hỏi và trả lời nhiều lần (ví dụ: How to secure database passwords in PHP?).Bảo mật thông tin kết nối cơ sở dữ liệu

Câu trả lời thường được chấp nhận cho câu hỏi đó là lưu trữ các chi tiết bên ngoài gốc web. Nhưng tôi tò mò là tại sao điều này thực sự tạo ra nhiều sự khác biệt.

Từ những gì tôi hiểu, một người không thể tải xuống nguồn của tệp PHP qua HTTP (trừ khi máy chủ web của bạn không được định cấu hình đúng cách, nhưng bạn sẽ biết điều đó ngay lập tức). Vì vậy, bạn sẽ không thể xem thông tin đăng nhập trừ khi bạn có quyền truy cập vào nguồn của tệp PHP anyways. Đúng nếu tôi sai, nhưng điều này không có nghĩa là bạn sẽ cần truy cập shell? Và nếu bạn có quyền truy cập trình bao, bạn có thể truy cập tệp bên ngoài gốc web không? Nếu câu trả lời cho câu hỏi đó là tệp bao gồm có quyền đặc biệt không cho phép bất kỳ ai ngoài người dùng máy chủ web đọc nó, thì (xem xét rằng tôi có quyền truy cập trình bao), tôi không thể viết (hoặc sửa đổi) bất kỳ tập tin PHP để chỉ echo ra những thông tin đăng nhập?

Vì vậy, câu hỏi là, thực hiện thực sự có tạo sự khác biệt nào cho dù bạn lưu trữ thông tin xác thực trực tiếp trong tập lệnh PHP so với tệp bên ngoài gốc web không?

Trả lời

8

Giả sử, do lỗi trong máy chủ web, máy chủ web không còn xử lý tệp php, nhưng xử lý chúng dưới dạng tệp html.

Trong trường hợp đó, chẳng hạn như http://mysite.com/config.php sẽ đơn giản tiết lộ thông tin xác thực của cơ sở dữ liệu của bạn.

Vì vậy, câu trả lời là: Có, nó thực sự quan trọng, ở đâu và cách bạn lưu trữ thông tin đăng nhập cơ sở dữ liệu.

+1

Có điều này thực sự đã xảy ra với facebook một lần! http://techcrunch.com/2007/08/11/facebook-source-code-leaked/ – fire

+0

Hoặc ngăn chặn lỗi này: http://eindbazen.net/2012/05/php-cgi-advisory-cve-2012- 1823/ – Tchoupi

+0

@Dev Câu hỏi là: * tại sao chúng ta nên lưu trữ thông tin đăng nhập db bên ngoài webroot? *. Điều này trả lời câu hỏi. – Tchoupi

5

Vấn đề chính là máy chủ web có thể bị hỏng sau này. Ví dụ. sau khi cập nhật phần mềm php có thể không hoạt động bình thường nữa và máy chủ sẽ quay lại để phân phối tệp trực tiếp. Hoặc một lần nữa sau khi cập nhật phần mềm, cấu hình có thể được đặt lại, do đó, PHP không còn được đăng ký cho phần mở rộng của tệp. Hoặc máy chủ bị hỏng dưới tải nặng và cũng bắt đầu phân phối tệp một cách rõ ràng.

Nhiều thứ có thể xảy ra và dễ dàng làm hỏng cấu hình tại một số thời điểm. Tốt hơn là an toàn và giữ nó bên ngoài gốc tài liệu.

+0

Điểm rất tốt. Đó là nhiều hơn những gì tôi đang tìm kiếm. Tôi đã không nghĩ đến các bản cập nhật phần mềm và những thứ lộn xộn như vậy. Cảm ơn! – Travesty3

0
  1. Tạo một/S sử dụng O cho ứng dụng của bạn, chẳng hạn như 'UserForMyApp'

  2. Đối với người dùng rằng, tạo ra một O/S sử dụng biến môi trường 'MY_APP_DATABASE_PASSWORD', và thiết lập giá trị

  3. Chạy ứng dụng của bạn là 'UserForMyApp'

  4. Trong MyApp, đọc các O/S sử dụng biến môi trường 'MY_APP_DATABASE_PASSWORD' và sử dụng để đăng nhập vào cơ sở dữ liệu

Người dùng không phải gốc khác không thể đọc biến môi trường người dùng O/S cho người dùng khác. Đây là mặc định. Bạn không cần phải đặt bất cứ điều gì, không giống như quyền truy cập tập tin w.

Không có cơ hội lưu trữ mật khẩu trong kiểm soát nguồn do tai nạn.

Nếu db và ứng dụng trên cùng một máy có thể chỉ cho phép db tin cậy quyền truy cập cục bộ mà không cần mật khẩu.

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