Hướng dẫn what is salt and hashing php? - muối và băm php là gì?

Bằng cách áp dụng thuật toán băm vào mật khẩu người dùng của bạn trước khi lưu trữ chúng trong cơ sở dữ liệu của bạn, bạn không thể xác định được mật khẩu ban đầu, trong khi vẫn có thể so sánh Hash kết quả với mật khẩu ban đầu trong tương lai. Muối mật mã là một dữ liệu được áp dụng trong quá trình băm để loại bỏ khả năng đầu ra được tra cứu trong một danh sách các cặp băm được tính toán sẵn và đầu vào của chúng. Về cơ bản, muối PHP và băm là các công cụ mật mã giúp bảo mật trang web của bạn đăng nhập. & NBSP;

Hướng dẫn liên quan - Hướng dẫn toàn diện về bảo mật PHP

Tại sao bạn nên băm mật khẩu

Mật khẩu băm là một trong những thực hành bảo mật cơ bản nhất phải được tuân thủ khi bạn có kế hoạch chấp nhận mật khẩu. Không có băm, bất kỳ mật khẩu nào được lưu trữ trong cơ sở dữ liệu của bạn có thể bị đánh cắp nếu cơ sở dữ liệu bị xâm phạm và sau đó chúng có thể được sử dụng ngay lập tức để thỏa hiệp không chỉ ứng dụng của bạn mà cả tài khoản của người dùng trên các dịch vụ khác nếu chúng sử dụng cùng một mật khẩu ở nơi khác. & NBSP ;

Tuy nhiên, điều quan trọng là phải bảo mật trang web của bạn theo những cách khác, vì việc băm chỉ bảo vệ mật khẩu khỏi bị xâm phạm trong cơ sở dữ liệu của bạn, nhưng không nhất thiết phải bảo vệ chúng khỏi bị chặn bởi phần mềm độc hại hoặc tin tặc. & NBSP;

Hướng dẫn liên quan - Các vấn đề bảo mật PHP

Cách bạn nên băm mật khẩu

Nên sử dụng một trong hai phương pháp sau đây để băm mật khẩu của bạn:

  1. API băm mật khẩu gốc được cung cấp bởi PHP 5.5 hoặc thư viện tương thích PHP thuần túy có sẵn cho PHP 5.3.7 trở lên. API băm mật khẩu gốc có sẵn trong PHP 5.5 xử lý an toàn cả băm và xác minh mật khẩu một cách an toàn. & NBSP;native password hashing API provided by PHP 5.5 or the pure PHP compatibility library available for PHP 5.3.7 and later. The native password hashing API available in PHP 5.5 safely handles both hashing and verifying passwords securely. 
  2. Sử dụng hàm Crypt (), vì nó hỗ trợ một số thuật toán băm trong PHP 5.3 trở lên. Có đề xuất sử dụng thuật toán Blowfish - là tùy chọn mặc định - trái ngược với các hàm băm chung. Điều này là do các hàm băm phổ biến như md5 () và sha1 () rất dễ dàng để sử dụng vũ phu và sẽ không giữ tốt. Do đó, nên sử dụng các hàm băm rất khó để đảo ngược, như các tùy chọn được đưa ra ở trên, để mật khẩu ban đầu khó xác định hơn. & NBSP;crypt() function, as it supports several hashing algorithms in PHP 5.3 and later. It is suggested to use the Blowfish algorithm – which is the default option – as opposed to common hashing functions. This is because common hashing functions such as md5() and sha1() are very easy to brute-force and will not hold up well. It is, therefore, advised to use hashing functions that are very difficult to reverse, like the options given above, so that the original password is harder to determine. 

Lưu ý: Bạn nên sử dụng API băm mật khẩu gốc với hàm Crypt () để ngăn chặn các cuộc tấn công thời gian tự động. & NBSP; It is strongly recommended that you use the native password hashing API with the crypt() function in order to prevent timing attacks automatically. 

Cách bạn nên làm và lưu trữ muối

Trong các thuật ngữ cơ bản nhất, một muối là một chút dữ liệu ngẫu nhiên được thêm vào cuối mật khẩu để làm cho hàm băm của bạn khó đảo ngược, do đó bảo vệ mật khẩu. Mặc dù có rất nhiều máy phát muối có sẵn trực tuyến, bạn có thể sử dụng password_hash () để tạo một loại muối ngẫu nhiên - đây là cách tiếp cận dễ nhất. & NBSP;

Giá trị trả về của phương pháp băm bạn đã chọn bao gồm muối như là một phần của băm được tạo. Đây là giá trị bạn nên lưu trữ trong cơ sở dữ liệu của mình, vì nó bao gồm thông tin về hàm băm đã được sử dụng và sau đó có thể được sử dụng để khớp với mật khẩu và xác thực các lần thử đăng nhập. & NBSP;

Hướng dẫn liên quan - Hướng dẫn loại bỏ phần mềm php & phần mềm độc hại

Kết luận: muối và băm php

Mật khẩu được mã hóa khó hack hơn một mật khẩu mà không, và bằng cách băm mật khẩu trong trang web PHP của bạn, bạn làm cho một hacker khó tấn công bạn hơn. Các cuộc tấn công trên mạng là khủng khiếp, và hậu quả của họ đối với lưu lượng, doanh thu và thậm chí là danh tiếng của bạn. Vì vậy, để ngăn chặn bị tấn công, nên đầu tư vào bảo mật và tuân theo các hoạt động bảo mật tốt như sử dụng muối và băm PHP - một chút về phía bạn có thể đi một chặng đường dài!

Về Astra

Tại Astra, chúng tôi có một nhóm các chuyên gia bảo mật hàng ngày giúp chủ sở hữu trang web và nhà phát triển bảo mật trang web của họ khỏi những kẻ tấn công. Tường lửa thông minh của chúng tôi cung cấp bảo mật 24 × 7 thời gian thực chống lại các bot xấu, tin tặc, phần mềm độc hại, XSS, SQLI và 80+ cuộc tấn công. Astra Firewall được điều chỉnh cao cho các trang web và CMS dựa trên PHP như WordPress, Prestashop, Opencart & Magento để cung cấp bảo mật toàn diện cho trang web của bạn.

Xem Tường lửa thông minh và máy quét phần mềm độc hại của chúng tôi hoạt động in action

Dừng các bot xấu, SQLI, RCE, XSS, CSRF, RFI/LFI và hàng ngàn cuộc tấn công mạng và các nỗ lực hack.

Sreenidhi

Sreenidhi là một người đam mê công nghệ, thích viết về an ninh mạng và khoa học dữ liệu. Các lĩnh vực quan tâm của cô bao gồm bảo mật WordPress, phần mềm độc hại mới và tin tức an ninh mạng gần đây.

Tuyên bố miễn trừ trách nhiệm: Câu trả lời này được viết vào năm 2008.: This answer was written in 2008.

Kể từ đó, PHP đã cho chúng tôi password_hashpassword_verify và, kể từ khi được giới thiệu, họ là phương thức băm & kiểm tra mật khẩu được đề xuất.

Lý thuyết về câu trả lời vẫn là một bài đọc tốt mặc dù.

TL;DR

Don'ts

  • Đừng giới hạn những gì người dùng có thể nhập cho mật khẩu. Chỉ những kẻ ngốc làm điều này.
  • Đừng giới hạn độ dài của mật khẩu. Nếu người dùng của bạn muốn có một câu với SuperCaliFragilisticExpialidocious trong đó, đừng ngăn họ sử dụng nó.
  • Đừng tước hoặc thoát HTML và các ký tự đặc biệt trong mật khẩu.
  • Không bao giờ lưu trữ mật khẩu của người dùng của bạn bằng văn bản đơn giản.
  • Không bao giờ gửi email mật khẩu cho người dùng của bạn trừ khi họ bị mất của họ và bạn đã gửi một mật khẩu tạm thời.
  • Không bao giờ, bao giờ nhật ký mật khẩu theo bất kỳ cách nào.
  • Không bao giờ băm mật khẩu với SHA1 hoặc MD5 hoặc thậm chí là SHA256! Crackers hiện đại có thể vượt quá 60 và 180 tỷ băm/giây (tương ứng).
  • Đừng trộn bcrypt và với đầu ra thô của băm (), hoặc sử dụng đầu ra hex hoặc base64_encode nó. (Điều này áp dụng cho bất kỳ đầu vào nào có thể có Rogue \0 trong đó, điều này có thể làm suy yếu nghiêm trọng bảo mật.)

Dos

  • Sử dụng Scrypt khi bạn có thể; bcrypt nếu bạn không thể.
  • Sử dụng pbkdf2 nếu bạn không thể sử dụng bcrypt hoặc scrypt, với băm SHA2.
  • Đặt lại mật khẩu của mọi người khi cơ sở dữ liệu bị xâm phạm.
  • Thực hiện độ dài tối thiểu 8-10 ký tự hợp lý, cộng với yêu cầu ít nhất 1 chữ cái trên, 1 chữ cái thường, một số và một biểu tượng. Điều này sẽ cải thiện entropy của mật khẩu, lần lượt làm cho việc bẻ khóa khó khăn hơn. (Xem phần "Điều gì tạo ra một mật khẩu tốt?" Cho một số cuộc tranh luận.)

Tại sao dù sao cũng là mật khẩu?

Mục tiêu đằng sau mật khẩu băm rất đơn giản: Ngăn chặn quyền truy cập độc hại vào tài khoản người dùng bằng cách thỏa hiệp cơ sở dữ liệu. Vì vậy, mục tiêu của mật khẩu băm là để ngăn chặn một hacker hoặc cracker bằng cách tiêu tốn của chúng quá nhiều thời gian hoặc tiền bạc để tính toán mật khẩu văn bản đơn giản. Và thời gian/chi phí là những răn đe tốt nhất trong kho vũ khí của bạn.

Một lý do khác mà bạn muốn một hàm băm tốt, mạnh mẽ trên tài khoản người dùng là cho bạn đủ thời gian để thay đổi tất cả các mật khẩu trong hệ thống. Nếu cơ sở dữ liệu của bạn bị xâm phạm, bạn sẽ cần đủ thời gian để ít nhất khóa hệ thống, nếu không thay đổi mọi mật khẩu trong cơ sở dữ liệu.

Jeremiah Grossman, CTO của Whitehat Security, đã tuyên bố trên blog bảo mật của White Hat sau khi phục hồi mật khẩu gần đây yêu cầu phá vỡ lực lượng bảo vệ mật khẩu của anh ta:

Thật thú vị, khi sống trong cơn ác mộng này, tôi đã học được rất nhiều điều mà tôi không biết về việc bẻ khóa, lưu trữ và phức tạp. Tôi đã đánh giá cao lý do tại sao lưu trữ mật khẩu quan trọng hơn nhiều so với độ phức tạp của mật khẩu. Nếu bạn không biết mật khẩu của bạn được lưu trữ như thế nào, thì tất cả những gì bạn thực sự có thể phụ thuộc vào là sự phức tạp. Đây có thể là kiến ​​thức phổ biến đối với mật khẩu và chuyên gia về tiền điện tử, nhưng đối với các chuyên gia bảo mật trung bình hoặc bảo mật web, tôi rất nghi ngờ nó.

(Nhấn mạnh của tôi.)

Điều gì tạo ra một mật khẩu tốt dù sao?

Sự hỗn loạn. (Không phải là tôi hoàn toàn đăng ký vào quan điểm của Randall.)

Nói tóm lại, Entropy là bao nhiêu biến thể trong mật khẩu. Khi mật khẩu chỉ là chữ thường của La Mã, đó chỉ là 26 ký tự. Đó không phải là nhiều biến thể. Mật khẩu Alpha-Numeric tốt hơn, với 36 ký tự. Nhưng cho phép trên và chữ thường, với các ký hiệu, là khoảng 96 ký tự. Đó là tốt hơn rất nhiều so với chỉ các chữ cái. Một vấn đề là, để làm cho mật khẩu của chúng tôi trở nên đáng nhớ, chúng tôi chèn các mẫu mà làm giảm entropy. Ối!

Mật khẩu entropy dễ dàng xấp xỉ. Sử dụng toàn bộ các ký tự ASCII (khoảng 96 ký tự có thể đánh máy) mang lại entropy 6,6 mỗi ký tự, ở mức 8 ký tự cho mật khẩu vẫn còn quá thấp (52,679 bit entropy) cho bảo mật trong tương lai. Nhưng tin tốt là: mật khẩu dài hơn và mật khẩu với các ký tự Unicode, thực sự làm tăng entropy của mật khẩu và làm cho nó khó bị bẻ khóa hơn.

Có một cuộc thảo luận dài hơn về entropy mật khẩu trên trang web Crypto Stackexchange. Một tìm kiếm tốt của Google cũng sẽ làm nổi bật rất nhiều kết quả.

Trong các ý kiến ​​tôi đã nói chuyện với @PopNoodles, người đã chỉ ra rằng việc thực thi chính sách mật khẩu có độ dài x với x nhiều chữ cái, số, ký hiệu, v.v., thực sự có thể giảm entropy bằng cách làm cho sơ đồ mật khẩu dễ dự đoán hơn. Tôi thực sự đồng ý. Ngẫu nhiên, thực sự ngẫu nhiên nhất có thể, luôn là giải pháp an toàn nhất nhưng ít đáng nhớ nhất.

Cho đến nay, tôi đã có thể nói, làm cho mật khẩu tốt nhất thế giới là một Catch-22. Nó không đáng nhớ, quá dễ đoán, quá ngắn, quá nhiều ký tự Unicode (khó gõ trên Windows/thiết bị di động), quá dài, v.v. Không có mật khẩu nào thực sự đủ tốt cho mục đích của chúng tôi, vì vậy chúng tôi phải bảo vệ chúng như thể chúng đã ở Fort Knox.

Thực hành tốt nhất

BCrypt và Scrypt là những thực tiễn tốt nhất hiện tại. Scrypt sẽ tốt hơn so với BCRYPT theo thời gian, nhưng nó đã không xem việc áp dụng như một tiêu chuẩn của Linux/UNIX hoặc bởi các máy chủ web, và chưa có đánh giá chuyên sâu về thuật toán của nó được đăng. Tuy nhiên, tương lai của thuật toán trông có vẻ đầy hứa hẹn. Nếu bạn đang làm việc với Ruby, có một viên đá quý sẽ giúp bạn ra ngoài và Node.js hiện có gói Scrypt của riêng mình. Bạn có thể sử dụng Scrypt trong PHP thông qua tiện ích mở rộng Scrypt hoặc tiện ích mở rộng libsodium (cả hai đều có sẵn trong PECL).

Tôi thực sự khuyên bạn nên đọc tài liệu cho chức năng Crypt nếu bạn muốn hiểu cách sử dụng BCRYPT hoặc tìm cho mình một trình bao bọc tốt hoặc sử dụng một cái gì đó như Phpass để triển khai kế thừa hơn. Tôi đề nghị tối thiểu 12 vòng bcrypt, nếu không phải là 15 đến 18.

Tôi đã thay đổi suy nghĩ về việc sử dụng bcrypt khi tôi biết rằng bcrypt chỉ sử dụng lịch trình chính của blowfish, với một cơ chế chi phí thay đổi. Loại thứ hai cho phép bạn tăng chi phí cho Brute-Force Mật khẩu bằng cách tăng lịch trình chính đã tốn kém của Blowfish.

Thực hành trung bình

Tôi gần như không thể tưởng tượng được tình huống này nữa. PHPass hỗ trợ Php 3.0,18 đến 5.3, do đó, có thể sử dụng trên hầu hết mọi cài đặt có thể tưởng tượng được và nên được sử dụng nếu bạn không biết chắc chắn rằng môi trường của bạn hỗ trợ BCRYPT.

Nhưng giả sử rằng bạn không thể sử dụng bcrypt hoặc phpass. Cái gì sau đó?

Hãy thử triển khai PDKBF2 với số lượng vòng tối đa mà môi trường/ứng dụng/nhận thức của người dùng của bạn có thể chịu đựng được. Số thấp nhất tôi đề xuất là 2500 vòng. Ngoài ra, hãy đảm bảo sử dụng hash_hmac () nếu nó có sẵn để làm cho hoạt động khó tái tạo hơn.

Thực hành trong tương lai

Đến trong Php 5.5 là một thư viện bảo vệ mật khẩu đầy đủ, tóm tắt mọi nỗi đau khi làm việc với BCRYPT. Mặc dù hầu hết chúng ta đều bị mắc kẹt với PHP 5.2 và 5.3 trong hầu hết các môi trường phổ biến, đặc biệt là các máy chủ được chia sẻ, @ircmaxell đã xây dựng một lớp tương thích cho API sắp tới tương thích với Php 5.3.7.

Tóm tắt & Tuyên bố miễn trừ tiền mật.

Sức mạnh tính toán cần thiết để thực sự bẻ khóa mật khẩu băm không tồn tại. Cách duy nhất để máy tính "bẻ khóa" mật khẩu là tạo lại nó và mô phỏng thuật toán băm được sử dụng để bảo mật nó. Tốc độ của băm có liên quan tuyến tính đến khả năng của nó để bị ảnh hưởng. Tệ hơn nữa, hầu hết các thuật toán băm có thể dễ dàng song song để thực hiện nhanh hơn. Đây là lý do tại sao các chương trình tốn kém như BCRYPT và Scrypt rất quan trọng.

Bạn không thể thấy trước tất cả các mối đe dọa hoặc con đường tấn công, và vì vậy bạn phải nỗ lực hết sức để bảo vệ người dùng của mình lên phía trước. Nếu bạn không, thì bạn thậm chí có thể bỏ lỡ sự thật rằng bạn đã bị tấn công cho đến khi quá muộn ... và bạn phải chịu trách nhiệm. Để tránh tình huống đó, hành động hoang tưởng để bắt đầu. Tấn công phần mềm của riêng bạn (trong nội bộ) và cố gắng đánh cắp thông tin đăng nhập của người dùng hoặc sửa đổi tài khoản của người dùng khác hoặc truy cập dữ liệu của họ. Nếu bạn không kiểm tra tính bảo mật của hệ thống của mình, thì bạn không thể đổ lỗi cho bất cứ ai trừ chính bạn.up front. If you do not, then you might even miss the fact that you were attacked until it's too late... and you're liable. To avoid that situation, act paranoid to begin with. Attack your own software (internally) and attempt to steal user credentials, or modify other user's accounts or access their data. If you don't test the security of your system, then you cannot blame anyone but yourself.

Cuối cùng: Tôi không phải là một nhà mật mã học. Bất cứ điều gì tôi đã nói là ý kiến ​​của tôi, nhưng tôi tình cờ nghĩ rằng nó dựa trên ý thức chung của ol ... và rất nhiều việc đọc. Hãy nhớ rằng, hãy hoang tưởng nhất có thể, làm cho mọi thứ khó xâm nhập nhất có thể, và sau đó, nếu bạn vẫn lo lắng, hãy liên hệ với một hacker mũ trắng hoặc nhà mật mã học để xem những gì họ nói về mã/hệ thống của bạn.

Băm và muối là gì?

Băm là một quy trình một chiều chuyển đổi mật khẩu thành bản mã bằng thuật toán băm. Mật khẩu băm không thể được giải mã, nhưng một hacker có thể cố gắng đảo ngược thiết kế nó. Mật khẩu muối thêm các ký tự ngẫu nhiên trước hoặc sau khi mật khẩu trước khi băm để làm mờ mật khẩu thực tế.. A hashed password cannot be decrypted, but a hacker can try to reverse engineer it. Password salting adds random characters before or after a password prior to hashing to obfuscate the actual password.

Muối trong PHP là gì?

Muối là gì?Một muối mật mã là dữ liệu được áp dụng trong quá trình băm để loại bỏ khả năng đầu ra được tra cứu trong một danh sách các cặp băm được tính toán sẵn và đầu vào của chúng, được gọi là bảng cầu vồng.

Php băm là gì?

Hàm băm trong PHP là một phương pháp đặc biệt được xác định trước và được sử dụng để chỉ ra một chuỗi ở dạng giá trị xác định được đo từ các ký tự của chuỗi.Nó phổ biến cho ứng dụng của nó như là một thuật toán mã hóa và là một biểu diễn giá trị chỉ mục cho các mục trong cơ sở dữ liệu.a special method pre-defined and used for indicating a string in the form of a definite value measured from the string's characters. It is popular for its application as an encryption algorithm and as an index value representation for items in the database.

Có phải muối giống như băm không?

Băm là hàm một chiều trong đó dữ liệu được ánh xạ tới giá trị có độ dài cố định.Băm chủ yếu được sử dụng để xác thực.Salting là một bước bổ sung trong quá trình băm, thường thấy liên kết với mật khẩu băm, thêm một giá trị bổ sung cho cuối mật khẩu thay đổi giá trị băm được tạo ra.Salting is an additional step during hashing, typically seen in association to hashed passwords, that adds an additional value to the end of the password that changes the hash value produced.