আপনি পিএইচপি-র সাথে হ্যাশ করে যাবেন এমন পাসওয়ার্ডগুলিতে আপনাকে কখনই পালানো, ছাঁটাই বা অন্য কোনও পরিষ্কারকরণ ব্যবস্থা ব্যবহার করা উচিত নয় password_hash()
, এর মধ্যে সবচেয়ে বড়টি কারণ পাসওয়ার্ডে অতিরিক্ত পরিস্কার করার জন্য অপ্রয়োজনীয় অতিরিক্ত কোডের প্রয়োজন হয় requires
আপনি তর্ক করবেন (এবং আপনি এটি প্রতিটি পোস্টে দেখতে পাবেন যেখানে ব্যবহারকারীর ডেটাগুলি আপনার সিস্টেমে ব্যবহারের জন্য গৃহীত হয়) যে আমাদের সমস্ত ব্যবহারকারীর ইনপুট পরিষ্কার করা উচিত এবং আমরা আমাদের ব্যবহারকারীদের কাছ থেকে গ্রহণযোগ্য প্রতিটি তথ্যের জন্যই সঠিক হতে পারি। পাসওয়ার্ডগুলি আলাদা। হ্যাশ করা পাসওয়ার্ডগুলি কোনও এসকিউএল ইঞ্জেকশন হুমকির প্রস্তাব দিতে পারে না কারণ ডাটাবেসে সংরক্ষণের আগে স্ট্রিংটি হ্যাশে পরিণত হয়।
পাসওয়ার্ড হ্যাশ করার কাজটি আপনার ডেটাবেজে পাসওয়ার্ডটি নিরাপদে রাখার কাজ। হ্যাশ ফাংশনটি কোনও বাইটকে বিশেষ অর্থ দেয় না, সুতরাং সুরক্ষা কারণে কোনও কারণে এর ইনপুট পরিষ্কারের প্রয়োজন হয় না
আপনি যদি ব্যবহারকারীদের তাদের পছন্দসই পাসওয়ার্ড / বাক্যাংশ ব্যবহার করার অনুমতি দেওয়ার মন্ত্রগুলি অনুসরণ করেন এবং আপনি পাসওয়ার্ড সীমাবদ্ধ না করেন , কোনও দৈর্ঘ্য, কোনও স্থানের সংখ্যা এবং কোনও বিশেষ অক্ষরের হ্যাশিং এর মধ্যে যা কিছু থাকে তা পাসওয়ার্ড / পাসফ্রেজকে নিরাপদ করে দেবে শব্দসংকেত. এই মুহূর্তে সর্বাধিক সাধারণ হ্যাশ (ডিফল্ট), PASSWORD_BCRYPT
পাসওয়ার্ডটিকে হ্যাশ পাসওয়ার্ডের তথ্য এবং একটি ব্যয় (হ্যাশ তৈরির আলগোরিদিমিক ব্যয়) সহ একটি এলোমেলো লবণযুক্ত একটি 60 অক্ষরের প্রশস্ত স্ট্রিংয়ে রূপান্তরিত করে:
PASSWORD_BCRYPT CRYPT_BLOWFISH অ্যালগরিদম ব্যবহার করে নতুন পাসওয়ার্ড হ্যাশ তৈরি করতে ব্যবহৃত হয়। এটি সর্বদা "$ 2y $" ক্রিপ্ট ফর্ম্যাট ব্যবহার করে একটি হ্যাশের ফলস্বরূপ, যা সর্বদা 60 অক্ষর প্রস্থ।
হ্যাশ সংরক্ষণের জন্য স্থানের প্রয়োজনীয়তাগুলি পরিবর্তিত হতে পারে কারণ ফাংশনে বিভিন্ন হ্যাশিং পদ্ধতি যুক্ত করা হয়, তাই সঞ্চিত হ্যাশগুলির জন্য কলামের ধরণে আরও বড় হওয়া ভাল VARCHAR(255)
orTEXT
।
আপনি আপনার পাসওয়ার্ড হিসাবে একটি সম্পূর্ণ এসকিউএল ক্যোয়ারী ব্যবহার করতে পারেন এবং এটি হ্যাশ হয়ে যাবে, এসকিউএল ইঞ্জিন দ্বারা এটি অনিবার্য করে তোলে যেমন,
SELECT * FROM `users`;
তাড়াতাড়ি করা যেতে পারে $2y$10$1tOKcWUWBW5gBka04tGMO.BH7gs/qjAHZsC5wyG0zmI2C.KgaqU5G
আসুন দেখুন কীভাবে বিভিন্ন স্বাস্থ্যবিধি পদ্ধতি পাসওয়ার্ডকে প্রভাবিত করে -
পাসওয়ার্ডটি হ'ল I'm a "dessert topping" & a <floor wax>!
(এখানে শেষে 5 টি স্পেস রয়েছে যা এখানে প্রদর্শিত হয় না))
আমরা যখন ছাঁটাইয়ের নিম্নলিখিত পদ্ধতিগুলি প্রয়োগ করি তখন আমরা কিছু বুনো বিভিন্ন ফলাফল পাই:
var_dump(trim($_POST['upassword']))
var_dump(htmlentities($_POST['upassword']))
var_dump(htmlspecialchars($_POST['upassword']))
var_dump(addslashes($_POST['upassword']))
var_dump(strip_tags($_POST['upassword']))
ফলাফল:
string(40) "I'm a "dessert topping" & a <floor wax>!"
string(65) "I'm a "dessert topping" & a <floor wax>! "
string(65) "I'm a "dessert topping" & a <floor wax>! "
string(48) "I\'m a \"dessert topping\" & a <floor wax>! "
string(34) "I'm a "dessert topping" & a ! "
আমরা এগুলিতে পাঠালে কী হয় password_hash()
? উপরে উঠে থাকা কোয়েরি যেমন হয়েছে তেমনি এগুলি সমস্ত হ্যাশ হয়ে যায়। আপনি পাসওয়ার্ড যাচাই করার চেষ্টা করার সময় সমস্যাটি আসে। আমরা যদি এই পদ্ধতিগুলির এক বা একাধিক নিয়োগ করি তবে তাদের সাথে তুলনা করার আগে আমাদের অবশ্যই তাদের পুনরায় নিয়োগ করতে হবে password_verify()
। নিম্নলিখিত ব্যর্থ হবে:
password_verify($_POST['upassword'], $hashed_password); // where $hashed_password comes from a database query
পাসওয়ার্ড যাচাইকরণের ফলাফলটি ব্যবহারের আগে আপনাকে যে ক্লিনিজিং পদ্ধতিটি বেছে নিয়েছিল তার মাধ্যমে পোস্ট করা পাসওয়ার্ডটি চালাতে হবে। এটি পদক্ষেপের একটি অপ্রয়োজনীয় সেট এবং হ্যাশকে আরও ভাল করে তুলবে।
পিএইচপি সংস্করণ 5.5 এর চেয়ে কম ব্যবহার করছেন? আপনি password_hash()
সামঞ্জস্যতা প্যাক ব্যবহার করতে পারেন ।
আপনার সত্যিই MD5 পাসওয়ার্ড হ্যাশ ব্যবহার করা উচিত নয় ।