2010-02-22 27 views
8

Chúng tôi đang tạo một ứng dụng bằng PHP và sử dụng một số dịch vụ của bên thứ ba yêu cầu khóa API bí mật. Chúng tôi có tệp PHP chứa tất cả các định nghĩa khóa mà chúng tôi nhập vào (sử dụng require_once) khi cần.Lưu trữ các khóa bí mật quan trọng trong các tập tin php

Phương pháp này có an toàn không? Chúng ta có nên cất chìa khóa ở một nơi khác không?

Cảm ơn bạn.

Trả lời

13

Something similar được yêu cầu hôm nay cho tập lệnh trình bao. Câu trả lời cũng hợp lệ ở đây: Đảm bảo bạn lưu trữ tệp bên ngoài gốc web hoặc (nếu không thể) hãy bảo vệ tệp bằng cách sử dụng tệp .htaccess.

Tôi cũng thích unset() bất kỳ biến nào chứa dữ liệu nhạy cảm sau khi sử dụng, do đó, thậm chí không có biến đổ đầy đủ (ví dụ: trong thông báo gỡ lỗi) sau đó trong tập lệnh đó có thể tiết lộ nó.

+4

1 cho unsetting các biến một khi họ không cần thiết. Tôi làm điều này với mật khẩu cơ sở dữ liệu của tôi. – MitMaro

+0

Đây là một câu trả lời tuyệt vời, cảm ơn. – DiogoNeves

+0

Bây giờ tôi nghĩ về nó, tôi có thể để các phím ở cùng một chỗ (với các thiết lập quyền tốt hơn) nhưng mã hóa chúng, chỉ đặt khóa mã hóa ngoài tầm với của webroot. Bằng cách đó chúng ta có thể đọc tệp trong nhiều máy như chúng ta cần ngay sau khi chúng ta cấu hình chúng với chính khóa của chúng ta? Cảm ơn bạn một lần nữa. – DiogoNeves

3

Cần tương đối an toàn miễn là tệp không thể truy cập được từ web. Rất nhiều trang web sẽ đặt các tệp nhạy cảm bên ngoài webroot trên máy chủ và chỉ cần bao gồm chúng khi cần thiết vào ứng dụng của chúng.

3

Tôi luôn đặt quyền của chứng chỉ và các tệp khác chứa dữ liệu nhạy cảm sao cho chỉ nhóm phát triển của tôi và dịch vụ apache mới có thể truy cập tệp. Điều này rất quan trọng nếu bạn đang sử dụng một máy chủ được chia sẻ bởi một tổ chức lớn, như một trường đại học, nơi mà nhiều người có thể có quyền truy cập tệp theo mặc định. Thường thì tôi đã thấy quyền đọc cho tất cả mọi người để máy chủ web có thể truy cập tệp (vì nó không phải là chủ sở hữu hay trong nhóm cho phép tệp, điều duy nhất còn lại là để đọc cho "khác").

Thay vào đó, tôi đảm bảo có một nhóm chỉ chứa nhóm phát triển của tôi và đặt quyền đọc/ghi cho tệp vào nhóm đó. Sau đó tôi sử dụng ACL để thêm quyền đọc cho dịch vụ APACHE. Bạn phải sử dụng ACL vì chủ sở hữu và nhóm thường được đặt thành nhóm nhà phát triển và nhóm phát triển, khiến bạn không có tùy chọn để thiết lập quyền truy cập cho apache ngoài việc sử dụng ACL.

+1

+1 Điểm tốt để làm việc trên các máy chủ chia sẻ - nó thường thoát khỏi tâm trí rằng một 'chmod 777' có nghĩa là tất cả những người hàng xóm cũng có thể truy cập tệp. –

+0

Bây giờ tôi nghĩ về nó, tôi có thể để các khóa ở cùng một chỗ (với các thiết lập quyền tốt hơn) nhưng mã hóa chúng, chỉ đặt khóa mã hóa ngoài tầm với của webroot. Bằng cách đó, chúng ta có thể đọc tệp trong nhiều máy như chúng ta cần ngay khi chúng ta cấu hình chúng bằng chính khóa của chúng ta? Cảm ơn bạn. – DiogoNeves

0

an ninh bởi obfuscation:

  1. tạo không gian tên riêng với chức năng mã hóa, giải mã
  2. thêm auto_prepend_file trong php.ini để /usr/share/nginx/outsidehtml/keystorage/83738489384828838227.php
  3. chạy nginx hoặc apache trong chroot, selinux
  4. vô hiệu hóa quyền danh sách đối với thư mục khóa phím setfacl -m user:nginx:x /usr/share/nginx/outsidehtml/keystorage/
  5. thêm php.ini disable_class = ReflectionFunction disable_function = opcache_get_status, phpinfo, show_source, ini_get
  6. Ví tốt hơn Harding bạn có thể lưu trữ quan trọng trong php.ini như giá trị tức là 123key = secret64

THI

print_r(glob('/usr/share/nginx/outsidehtml/keystorage/*.*')); 
Các vấn đề liên quan