2011-08-14 25 views
5

Xin chào các bạn là người mới với php và tôi phát hiện ra rằng đối với kết nối cơ sở dữ liệu, bạn nhập mật khẩu của mình trực tiếp vào tệp .php ("mysql_connect ($ host, $ user, $ pass, $ db"). Tôi sẽ sử dụng băm nhưng câu hỏi là người dùng có thể tải xuống tệp .php được biên dịch trước và xem mã nguồn của tôi và do đó lấy mật khẩu cơ sở dữ liệu của tôi hay không. Cảm ơn bạn trướcMật khẩu cơ sở dữ liệu PHP5 và nó có thể bị đánh cắp không?

+0

Tắt chủ đề: phần mở rộng mysql đã lỗi thời và đang trên đường không dùng nữa. Chuyển sang mysqli hoặc [PDO] (http://php.net/). – outis

Trả lời

3

Như đã đề cập bởi người trả lời khác, thông thường điều này không phải là vấn đề vì người dùng sẽ không thể xem mã PHP. Tuy nhiên, nếu bạn có kế hoạch chia sẻ mã với người khác, có thể có một chút rắc rối khi xóa tên người dùng và mật khẩu trước khi gửi cho ai đó (và nếu bạn quên họ sẽ biết mật khẩu của bạn).

Vì vậy, bạn có thể đặt thông tin vào một tệp và sau đó đọc nó vào PHP.Ví dụ, tạo ra một tập tin gọi là mysql.ini trong thư mục chính của bạn và đưa các thông tin sau trong đó:

host  = "127.0.0.1" 
username = "user" 
password = "pass" 
database = "db" 

Sau đó, đọc nó vào PHP và kết nối, như thế này:

$settings = parse_ini_file('/home/mysql.ini'); 
mysql_connect($settings['host'], $settings['username'], $settings['password'], $settings['database']); 

Hãy nhớ để đảm bảo rằng tệp nằm trong một phần của máy chủ web không thể truy cập công khai, tuy nhiên, nếu không mọi người sẽ có thể đọc thông tin đăng nhập của bạn.

3

Bạn không thể băm mật khẩu MySQL và vẫn kết nối với cơ sở dữ liệu. Nếu bạn có thể kết nối với mật khẩu băm, kẻ tấn công cũng có thể lấy băm và kết nối. Hashing (thậm chí tốt hơn khi được muối) là một điều tốt nếu bạn đang lưu trữ mật khẩu cho người dùng của mình trong cơ sở dữ liệu, nhưng thực sự không thể sử dụng được khi lưu trữ dữ liệu thông tin cơ sở.

Hầu hết mọi người, thay vì trực tiếp bao gồm cuộc gọi mysql_connect với tất cả thông tin đăng nhập trong tệp ứng dụng chính của họ, ít nhất require tệp cấu hình từ bên ngoài gốc tài liệu chứa thông tin xác thực.

Nếu bạn có tệp như config.php bên ngoài gốc tài liệu, thì trừ khi chúng có thể tìm thấy lỗ truyền tải thư mục trong máy chủ, không thể truy cập từ xa config.php.

2

xem nguồn của trang php của bạn- xem bất kỳ mã php nào không? bạn không nên chạy nó bởi máy chủ trước khi được gửi đến trình duyệt của người dùng. nó vẫn được khuyến khích bạn đặt các tập tin với các chi tiết đăng nhập dưới gốc web, trong trường hợp một cái gì đó phá vỡ trên máy chủ và các tập tin php không được phân tích cú pháp.

+0

Cảm ơn tất cả các bạn đã trả lời, chúng rất hữu ích :) –

3

có thể người dùng tải file .php precompiled

Không thông qua bản thân mod_php, nhưng nếu có một số lỗ hổng bảo mật trong các ứng dụng web (hoặc web server) sau đó một người nào đó chắc chắn có thể đọc PHP ngẫu nhiên các tập tin. Nếu kẻ tấn công có thể đột nhập vào máy chủ web, thì họ có thể truy xuất mật khẩu cơ sở dữ liệu - vâng, ngay cả khi bạn lưu trữ nó bên ngoài gốc web.

Bạn nên giả định rằng điều này sẽ xảy ra vào một số ngày; cố gắng hạn chế hậu quả của việc rò rỉ thông tin như vậy. Tập trung vào việc hạn chế tài khoản cơ sở dữ liệu mà bạn kết nối. Ứng dụng web không được kết nối với tài khoản cơ sở dữ liệu có quyền truy cập đọc/ghi vào mọi bảng trong cơ sở dữ liệu. Bạn nên hạn chế người dùng DB để nó chỉ có thể đọc từ các bảng cần đọc và chỉ ghi vào các bảng mà nó cần ghi vào đó.

Sử dụng thủ tục được lưu trữ là một cách hay để thêm lớp bảo mật bổ sung, vì bạn có thể thực hiện kiểm tra trong cơ sở dữ liệu về những hành động mà người dùng trang web được phép thực hiện. Sau đó, người dùng DB web chỉ có thể tương tác với cơ sở dữ liệu thông qua các thủ tục. Điều này sẽ hạn chế các hành động mà kẻ tấn công có thể thực hiện ngay cả khi anh ta có thể đưa ra các truy vấn cơ sở dữ liệu ngẫu nhiên.

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