Hướng dẫn how can i protect my database password in php? - làm cách nào tôi có thể bảo vệ mật khẩu cơ sở dữ liệu của mình trong php?
Khi một ứng dụng PHP tạo kết nối cơ sở dữ liệu, tất nhiên thường cần truyền thông tin đăng nhập và mật khẩu. Nếu tôi đang sử dụng một thông tin đăng nhập đơn, gửi tối thiểu cho ứng dụng của mình, thì PHP cần biết rằng đăng nhập và mật khẩu ở đâu đó. Cách tốt nhất để bảo mật mật khẩu đó là gì? Có vẻ như chỉ viết nó trong mã PHP không phải là một ý tưởng tốt. Show
Khao khát 12.9k6 Huy hiệu vàng61 Huy hiệu bạc91 Huy hiệu Đồng6 gold badges61 silver badges91 bronze badges hỏi ngày 18 tháng 9 năm 2008 lúc 23:27Sep 18, 2008 at 23:27
3 Một số người đọc sai điều này như một câu hỏi về cách lưu trữ mật khẩu trong cơ sở dữ liệu. Đó là sai. Đó là về cách lưu trữ mật khẩu cho phép bạn vào cơ sở dữ liệu.store passwords in a database. That is wrong. It is about how to store the password that lets you get to the database. Giải pháp thông thường là chuyển mật khẩu ra khỏi mã nguồn vào tệp cấu hình. Sau đó để quản trị và đảm bảo tệp cấu hình đó cho quản trị viên hệ thống của bạn. Bằng cách đó, các nhà phát triển không cần biết bất cứ điều gì về mật khẩu sản xuất và không có bản ghi mật khẩu trong kiểm soát nguồn của bạn.
Farray 8.0743 Huy hiệu vàng32 Huy hiệu bạc37 Huy hiệu đồng3 gold badges32 silver badges37 bronze badges Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:32Sep 18, 2008 at 23:32
user11318user11318user11318 9.1932 Huy hiệu vàng25 Huy hiệu bạc25 Huy hiệu Đồng2 gold badges25 silver badges25 bronze badges 18 Nếu bạn đang lưu trữ trên máy chủ của người khác và không có quyền truy cập bên ngoài Webroot của bạn, bạn luôn có thể đặt mật khẩu và/hoặc kết nối cơ sở dữ liệu của mình vào một tệp và sau đó khóa tệp bằng .htaccess:
Đã trả lời ngày 3 tháng 8 năm 2009 lúc 18:28Aug 3, 2009 at 18:28
Kellenkellenkellen 6.8253 huy hiệu vàng21 Huy hiệu bạc10 Huy hiệu đồng3 gold badges21 silver badges10 bronze badges 8 Cách an toàn nhất là không có thông tin được chỉ định trong mã PHP của bạn. Nếu bạn đang sử dụng Apache có nghĩa là đặt chi tiết kết nối trong tệp HTTPD.conf hoặc tệp máy chủ ảo của bạn. Nếu bạn làm điều đó, bạn có thể gọi mysql_connect () không có tham số, điều đó có nghĩa là PHP sẽ không bao giờ xuất thông tin của bạn. Đây là cách bạn chỉ định các giá trị này trong các tệp đó:
Sau đó, bạn mở kết nối MySQL như thế này:
Hoặc như thế này:
Đã trả lời ngày 16 tháng 4 năm 2012 lúc 15:13Apr 16, 2012 at 15:13
Lars Nyströmlars NyströmLars Nyström 5.5772 Huy hiệu vàng30 Huy hiệu bạc31 Huy hiệu Đồng2 gold badges30 silver badges31 bronze badges 10 Lưu trữ chúng trong một tập tin bên ngoài Root Web. Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:32Sep 18, 2008 at 23:32
da5idda5idda5id 9.1932 Huy hiệu vàng25 Huy hiệu bạc25 Huy hiệu Đồng8 gold badges38 silver badges53 bronze badges 4 Nếu bạn đang lưu trữ trên máy chủ của người khác và không có quyền truy cập bên ngoài Webroot của bạn, bạn luôn có thể đặt mật khẩu và/hoặc kết nối cơ sở dữ liệu của mình vào một tệp và sau đó khóa tệp bằng .htaccess: Đã trả lời ngày 3 tháng 8 năm 2009 lúc 18:28Sep 19, 2008 at 13:33
Kellenkellenpdavis 6.8253 huy hiệu vàng21 Huy hiệu bạc10 Huy hiệu đồng1 gold badge30 silver badges31 bronze badges 7 Cách an toàn nhất là không có thông tin được chỉ định trong mã PHP của bạn.
Advantages:
Đối với các hệ thống cực kỳ an toàn, chúng tôi mã hóa mật khẩu cơ sở dữ liệu trong tệp cấu hình (được bảo đảm bởi quản trị viên hệ thống). Trên Ứng dụng/Máy chủ khởi động, ứng dụng sau đó nhắc Quản trị viên Hệ thống cho khóa giải mã. Mật khẩu cơ sở dữ liệu sau đó được đọc từ tệp cấu hình, được giải mã và lưu trữ trong bộ nhớ để sử dụng trong tương lai. Vẫn chưa an toàn 100% vì nó được lưu trữ trong bộ nhớ được giải mã, nhưng bạn phải gọi nó là 'đủ an toàn' tại một số điểm! Đã trả lời ngày 19 tháng 9 năm 2008 lúc 13:33Dec 23, 2013 at 21:48
PdavispdavisNeil McGuigan 3.1741 Huy hiệu vàng 30 Huy hiệu bạc31 Huy hiệu Đồng12 gold badges120 silver badges147 bronze badges Giải pháp này là chung, trong đó nó hữu ích cho cả các ứng dụng nguồn mở và đóng.
Tạo người dùng hệ điều hành cho ứng dụng của bạn. Xem http://en.wikipedia.org/wiki/Principle_OF_LEAST_PRIVILEGE
Tạo biến môi trường hệ điều hành (không) cho người dùng đó, với mật khẩuSep 19, 2008 at 19:25
Chạy ứng dụng như người dùng đóBob Fanger Bạn sẽ không kiểm tra mật khẩu của mình để kiểm soát nguồn một cách tình cờ, vì bạn không thể7 gold badges61 silver badges78 bronze badges 4 Bạn sẽ không vô tình làm hỏng quyền của tập tin. Chà, bạn có thể, nhưng nó sẽ không ảnh hưởng đến điều này. Chỉ có thể được đọc bởi root hoặc người dùng đó. Root có thể đọc tất cả các tệp và khóa mã hóa của bạn bằng mọi cách. Nếu bạn sử dụng mã hóa, bạn đang lưu trữ chính như thế nào? Con với điều này là bây giờ mật khẩu nằm trong biến PHP toàn cầu. Để giảm thiểu rủi ro này, chúng tôi có các biện pháp phòng ngừa sau:
Đã trả lời ngày 15 tháng 2 năm 2017 lúc 2:41Feb 15, 2017 at 2:41
Courtney Milescourtney dặmCourtney Miles 3.5863 huy hiệu vàng28 Huy hiệu bạc46 Huy hiệu đồng3 gold badges28 silver badges46 bronze badges 2 Nếu bạn đang sử dụng PostgreSQL, thì nó sẽ tự động vào Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:52Sep 18, 2008 at 23:52
JimjimJim 72K14 Huy hiệu vàng100 Huy hiệu bạc105 Huy hiệu Đồng14 gold badges100 silver badges105 bronze badges Lựa chọn của bạn bị giới hạn như bạn nói rằng bạn cần mật khẩu để truy cập cơ sở dữ liệu. Một cách tiếp cận chung là lưu trữ tên người dùng và mật khẩu trong tệp cấu hình riêng biệt thay vì tập lệnh chính. Sau đó, hãy chắc chắn lưu trữ bên ngoài cây web chính. Đó là nếu có một vấn đề cấu hình web để lại các tệp PHP của bạn được hiển thị đơn giản là văn bản thay vì được thực thi, bạn không tiết lộ mật khẩu. Ngoài ra, bạn đang ở đúng dòng với quyền truy cập tối thiểu cho tài khoản đang được sử dụng. Thêm vào đó
Peter Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:36Sep 18, 2008 at 23:36
VagnerrvagnerrVagnerr 2.9373 huy hiệu vàng33 Huy hiệu bạc46 Huy hiệu đồng3 gold badges33 silver badges46 bronze badges Chúng tôi đã giải quyết nó theo cách này:
Đã trả lời ngày 28 tháng 8 năm 2016 lúc 16:27Aug 28, 2016 at 16:27
Asi Azulayasi AzulayAsi Azulay 711 Huy hiệu bạc1 Huy hiệu đồng1 silver badge1 bronze badge Đặt mật khẩu cơ sở dữ liệu vào một tệp, làm cho nó chỉ đọc cho người dùng phục vụ các tệp. Trừ khi bạn có một số phương tiện chỉ cho phép quy trình máy chủ PHP truy cập cơ sở dữ liệu, đây là điều khá nhiều bạn có thể làm. Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:32Sep 18, 2008 at 23:32
ChrischrisChris 4.77422 Huy hiệu bạc17 Huy hiệu đồng22 silver badges17 bronze badges Nếu bạn đang nói về mật khẩu cơ sở dữ liệu, trái ngược với mật khẩu đến từ trình duyệt, thực tiễn tiêu chuẩn dường như là đặt mật khẩu cơ sở dữ liệu trong tệp cấu hình PHP trên máy chủ. Bạn chỉ cần chắc chắn rằng tệp PHP chứa mật khẩu có quyền thích hợp trên đó. I E. Nó chỉ có thể đọc được bởi máy chủ web và tài khoản người dùng của bạn. Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:35Sep 18, 2008 at 23:35
Jason Wadsworthjason WadsworthJason Wadsworth 9331 Huy hiệu vàng10 Huy hiệu bạc18 Huy hiệu đồng1 gold badge10 silver badges18 bronze badges 3 Một thủ thuật bổ sung là sử dụng tệp cấu hình riêng của PHP trông như thế:
Điều này không ngăn bạn thiết lập quy tắc truy cập đúng. Nhưng trong trường hợp trang web của bạn bị hack, "yêu cầu" hoặc "bao gồm" sẽ chỉ thoát tập lệnh ở dòng đầu tiên để thậm chí còn khó có được dữ liệu hơn. Tuy nhiên, đừng bao giờ để các tệp cấu hình trong một thư mục có thể được truy cập thông qua web. Bạn nên có một thư mục "web" chứa mã điều khiển, CSS, hình ảnh và JS của bạn. Đó là tất cả. Bất cứ điều gì khác đi trong các thư mục ngoại tuyến. Đã trả lời ngày 19 tháng 9 năm 2008 lúc 13:08Sep 19, 2008 at 13:08
e-satise-satise-satis 564K109 Huy hiệu vàng294 Huy hiệu bạc328 Huy hiệu đồng109 gold badges294 silver badges328 bronze badges 5 Chỉ cần đặt nó vào một tệp cấu hình ở đâu đó là cách nó thường được thực hiện. Chỉ cần chắc chắn rằng bạn:
Raptor 52.1K44 Huy hiệu vàng223 Huy hiệu bạc357 Huy hiệu đồng44 gold badges223 silver badges357 bronze badges Đã trả lời ngày 18 tháng 9 năm 2008 lúc 23:35Sep 18, 2008 at 23:35
MarijnmarijnMarijn 2.0162 Huy hiệu vàng13 Huy hiệu bạc11 Huy hiệu đồng2 gold badges13 silver badges11 bronze badges Cách tốt nhất là không lưu trữ mật khẩu ở tất cả! Chẳng hạn, nếu bạn đang ở trên hệ thống Windows và kết nối với SQL Server, bạn có thể sử dụng xác thực tích hợp để kết nối với cơ sở dữ liệu mà không cần mật khẩu, sử dụng danh tính của quy trình hiện tại. Nếu bạn cần kết nối bằng mật khẩu, trước tiên hãy mã hóa nó, sử dụng mã hóa mạnh (ví dụ: sử dụng AES-256, sau đó bảo vệ khóa mã hóa hoặc sử dụng mã hóa không đối xứng và có hệ điều hành bảo vệ chứng nhận), sau đó lưu trữ nó trong Tệp cấu hình (bên ngoài thư mục web) với ACL mạnh.encrypt it, using strong encryption (e.g. using AES-256, and then protect the encryption key, or using asymmetric encryption and have the OS protect the cert), and then store it in a configuration file (outside of the web directory) with strong ACLs. Đã trả lời ngày 20 tháng 9 năm 2008 lúc 21:17Sep 20, 2008 at 21:17
AvidavidAviD 12.9k6 Huy hiệu vàng61 Huy hiệu bạc91 Huy hiệu Đồng6 gold badges61 silver badges91 bronze badges 5 Trên thực tế, thực tiễn tốt nhất là lưu trữ cơ sở dữ liệu của bạn các biến số trong các biến môi trường vì:
Làm thế nào để sử dụng chúng?
Bạn có thể dễ dàng bỏ một tệp như envvars.php với tất cả các biến môi trường bên trong và thực thi nó ( 3) và xóa nó. Đó là một trường học hơi cũ, nhưng nó vẫn hoạt động và bạn không có bất kỳ tệp nào với thông tin đăng nhập của mình trong máy chủ và không có thông tin đăng nhập trong mã của bạn. Vì nó hơi lao động, các khung làm điều đó tốt hơn.Ví dụ với Symfony (OK không chỉ PHP) Các khung hiện đại như Symfony khuyến nghị sử dụng các biến môi trường và lưu trữ chúng trong một tệp .Env không cam kết hoặc trực tiếp trong các dòng lệnh có nghĩa là bạn có thể làm được: The modern frameworks such as Symfony recommends using environment variables, and store them in a .env not commited file or directly in command lines which means you wether can do :
Tài liệu : Đã trả lời ngày 28 tháng 12 năm 2020 lúc 10:08Dec 28, 2020 at 10:08
Php Store được mã hóa mật khẩu trong cơ sở dữ liệu như thế nào?Quá trình này được sử dụng để mã hóa mật khẩu: Tạo một khóa mã hóa duy nhất (DEK) tranh giành thông tin sử dụng mã hóa khóa duy nhất. Di chuyển khóa mã hóa duy nhất (DEK) sang đám mây KMS để mã hóa, trả về KEK. Lưu dữ liệu được mã hóa và khóa (KEK) cùng với nhau.Create a unique encryption key (DEK) Scramble the information utilizing unique key encryption. Move the unique encryption key (DEK) to Cloud KMS for encryption, which returns the KEK. Save the encrypted data and key (KEK) along with each other.
Có an toàn để lưu trữ mật khẩu trong tệp PHP không?Đề xuất của tôi: Không lưu trữ mật khẩu trong mã nguồn.Thay vào đó, lưu trữ chúng trong một tệp cấu hình (bên ngoài gốc web) và đảm bảo tệp cấu hình không thể truy cập công khai.Don't store passwords in source code. Instead, store them in a configuration file (outside of the web root), and make sure the configuration file is not publicly accessible.
Chúng ta có thể lưu mật khẩu trong cơ sở dữ liệu không?Lưu trữ mật khẩu văn bản thuần túy trong cơ sở dữ liệu là một tội lỗi.Các hàm mã hóa cung cấp ánh xạ một-một giữa đầu vào và đầu ra và chúng luôn có thể đảo ngược.Nếu hacker nhận được chìa khóa, anh ta sẽ có thể giải mã mật khẩu.Cách tốt hơn sẽ là sử dụng hàm băm mật mã một chiều..
Encryption functions provide one-one mapping between input and output and they are always reversible. If the hacker gets the key, he will be able to decrypt the passwords. The better way would be to use a one way cryptographic hash function.
Làm thế nào chúng ta có thể mã hóa tên người dùng và mật khẩu bằng PHP?Mã hóa mật khẩu: Để tạo hàm băm từ chuỗi, chúng tôi sử dụng hàm password_hash ().Hàm password_hash () tạo ra một hàm băm mật khẩu mới của chuỗi bằng một trong các thuật toán băm có sẵn. |