2012-04-16 7 views
13

thể trùng lặp:
How to secure database passwords in PHP?ở đâu để đưa thông tin nhạy cảm cơ sở dữ liệu

Gần đây tôi đã được đưa ra một dự án trang web được cho là để được thực hiện trong PHP nhưng tôi không có nhiều kinh nghiệm trong PHP. Dù sao, nó đang hoạt động nhưng có một căn phòng lớn để cải thiện. Một điều mà tôi không cảm thấy tốt là cách tôi đang xử lý cơ sở dữ liệu: tôi đặt thông tin kết nối cơ sở dữ liệu vào một tệp db.php riêng và bao gồm nó khi cần. Nhưng tôi nhớ đã thấy các tệp nguồn PHP được máy chủ trả về nhiều lần.

Vì vậy, bây giờ câu hỏi của tôi là: cách tốt hơn hoặc cách tốt nhất để đặt dữ liệu nhạy cảm của cơ sở dữ liệu là gì?

Nhân tiện, cách KHÔNG cho phép PHP hiển thị thông báo lỗi trên trang web khi mọi thứ không ổn? Một trang lỗi tùy chỉnh hoặc cài đặt ở đâu đó trong php.ini? Cảm ơn!

Lưu ý: Tôi đang sử dụng PHP theo hương vị cũ không phải là cách hướng đối tượng. Nhưng tôi mở cửa cho đối tượng theo định hướng hoặc MVC cách nếu có tốt hơn phương pháp tiếp cận theo cách đó để chuẩn bị cho các dự án tương lai

+0

Câu hỏi hay, quan trọng! 1 cho suy nghĩ về an ninh. – David

+4

Đối với bạn bằng cách này, ['display_errors'] (http://www.php.net/manual/en/errorfunc.configuration.php#ini.display-errors) nên ** LUÔN LUÔN ** được đặt thành' tắt 'trên một máy chủ sản xuất. Bằng cách này, PHP sẽ ném một lỗi 500 thay vì hiển thị lỗi thực tế. –

+0

Tôi đoán display_errors = tắt trong php.ini nên ngăn chặn bất kỳ lỗi nào hiển thị – anuragsn7

Trả lời

7

Tôi không biết nếu điều này là những gì bạn đang tìm kiếm:
Bạn có thể đưa dữ liệu nhạy cảm của bạn trong tệp db.php của bạn, nhưng bên ngoài thư mục gốc của web (public_html hoặc www).

Ví dụ: bạn có thể có thư mục gọi là config là anh chị em trong thư mục gốc web của bạn và lưu trữ tệp db.php của bạn ở đó.

Bạn có thể bao gồm tập tin db.php của bạn như thế này:

require_once('../config/db.php'); 

Tôi hy vọng điều này sẽ giúp.

+2

+1 cho điều này giải pháp, cũng đừng quên thay đổi quyền của tệp này xuống mức thấp nhất nhưng vẫn có thể đọc được bởi máy chủ web. Nếu tập tin được sở hữu bởi quá trình webserver, có lẽ '0600' sẽ đủ an toàn? –

1

Phạt tiền của nó để đặt nó vào tệp db.php, chỉ cần sử dụng require_once() ngay sau thẻ mở <?php của mỗi tài liệu.

Nếu hạn chế dựa trên không có hiệu lực, hãy di chuyển tệp db.php ra ngoài web/root ftp của bạn theo cách đó chắc chắn không thể truy cập qua http/ftp. Đảm bảo quyền được đặt đúng trên tệp này.

Vì bạn không sử dụng OOP hoặc cấu trúc MVC cho mã của bạn nên đây là tuyến đường tốt nhất để đi.

2

Cá nhân tôi sẽ tạo ra một tập tin gọi là db.php và đặt này trên thư mục public_html trên máy chủ của bạn

ví dụ

<?php 
    error_reporting(0); 
    $link = FALSE; 
    $link = mysql_connect('hostname', 'username', 'password'); 
    if (! $link) 
    { 
     die("Couldn't connect to mysql server!"); 
    } else { 
     mysql_select_db('databasename'); 
    } 
?> 

này tắt báo cáo lỗi cùng một lúc như kết nối với bạn cơ sở dữ liệu, từ tệp index.php của bạn, bạn sẽ bao gồm tệp như vậy:

<?php require('../db.php'); ?>