Password Hashing এবং Encryption

Security Best Practices - কেকপিএইচপি (CakePHP) - Web Development

368

CakePHP তে Password Hashing এবং Encryption ব্যবহার করা হয় সুরক্ষিতভাবে ব্যবহারকারীর গোপনীয় তথ্য সংরক্ষণ এবং নিরাপত্তা নিশ্চিত করতে। আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিতে পাসওয়ার্ড এবং সংবেদনশীল তথ্য সংরক্ষণের জন্য উপযুক্ত হ্যাশিং এবং এনক্রিপশন প্রযুক্তি ব্যবহৃত হওয়া উচিত। এখানে কেকপিএইচপি তে পাসওয়ার্ড হ্যাশিং এবং এনক্রিপশন সম্পর্কিত বিভিন্ন টেকনিক আলোচনা করা হয়েছে।


১. পাসওয়ার্ড হ্যাশিং (Password Hashing)

Password Hashing একটি একমুখী প্রক্রিয়া যেখানে একটি পাসওয়ার্ডকে এমনভাবে রূপান্তরিত করা হয়, যা পুনরায় মূল পাসওয়ার্ড উদ্ধার করা সম্ভব নয়। এর মাধ্যমে পাসওয়ার্ডগুলোকে সুরক্ষিত রাখা যায়, কারণ অ্যাপ্লিকেশন ডেটাবেসে শুধুমাত্র হ্যাশ করা পাসওয়ার্ড সংরক্ষণ করে, আসল পাসওয়ার্ড কখনোই সঞ্চিত থাকে না।

CakePHP তে পাসওয়ার্ড হ্যাশ করার জন্য PasswordHasher ব্যবহার করা হয়।

১.১. পাসওয়ার্ড হ্যাশিং কনফিগারেশন

CakePHP তে পাসওয়ার্ড হ্যাশিং করার জন্য প্রথমে DefaultPasswordHasher ব্যবহার করা হয়। এটি SHA-256 অথবা bcrypt হ্যাশিং এলগরিদম ব্যবহার করে পাসওয়ার্ড হ্যাশ করে।

// src/Model/Table/UsersTable.php
namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Auth\DefaultPasswordHasher;

class UsersTable extends Table
{
    public function initialize(array $config): void
    {
        parent::initialize($config);
        
        // When saving a password, hash it first
        $this->addBehavior('Timestamp');
    }

    public function beforeSave($event, $entity, $options)
    {
        if ($entity->isNew() && $entity->password) {
            $hasher = new DefaultPasswordHasher();
            $entity->password = $hasher->hash($entity->password);  // Hash password before saving
        }
    }
}

এখানে:

  • beforeSave ইভেন্টে পাসওয়ার্ড হ্যাশ করা হচ্ছে, যাতে এটি ডেটাবেসে হ্যাশড আকারে সংরক্ষিত হয়।
  • DefaultPasswordHasher ক্লাসটি CakePHP তে ডিফল্ট পাসওয়ার্ড হ্যাশিং ক্লাস।

১.২. পাসওয়ার্ড যাচাই (Password Verification)

একবার পাসওয়ার্ড হ্যাশ করার পর, লগইন বা সনাক্তকরণ প্রক্রিয়ায় verify() মেথড ব্যবহার করে পাসওয়ার্ড যাচাই করা হয়।

// src/Controller/UsersController.php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Auth\DefaultPasswordHasher;

class UsersController extends Controller
{
    public function login()
    {
        $user = $this->Users->findByUsername($this->request->getData('username'))->first();
        
        if ($user && (new DefaultPasswordHasher)->check($this->request->getData('password'), $user->password)) {
            // User authenticated
            $this->set('message', 'Login successful');
        } else {
            // Authentication failed
            $this->set('message', 'Invalid username or password');
        }
    }
}

এখানে:

  • check() মেথডটি ব্যবহারকারীর পাসওয়ার্ড এবং হ্যাশ করা পাসওয়ার্ডের মধ্যে মিল পরীক্ষা করে।

২. এনক্রিপশন (Encryption)

Encryption হলো একটি দ্বিমুখী প্রক্রিয়া যেখানে ডেটাকে একটি গোপন কী দিয়ে এনক্রিপ্ট করা হয় এবং পরবর্তীতে সেই কী দিয়ে ডেটা ডিক্রিপ্ট করা যায়। এনক্রিপশন সাধারণত সংবেদনশীল ডেটা (যেমন পাসওয়ার্ড ছাড়াও ক্রেডিট কার্ড তথ্য) সুরক্ষিত রাখতে ব্যবহৃত হয়।

CakePHP তে এনক্রিপশন ব্যবহারের জন্য Security কম্পোনেন্ট এবং Crypt ক্লাস ব্যবহার করা যায়।

২.১. CakePHP তে ডেটা এনক্রিপশন

CakePHP তে Security কম্পোনেন্টের মাধ্যমে সহজে ডেটা এনক্রিপ্ট এবং ডিক্রিপ্ট করা যায়। তবে এখানে একটি কাস্টম এনক্রিপশন পদ্ধতি দেখানো হচ্ছে যা AES-256 এলগরিদম ব্যবহার করে:

// src/Controller/UsersController.php
namespace App\Controller;

use Cake\Controller\Controller;
use Cake\Utility\Security;

class UsersController extends Controller
{
    public function encryptData()
    {
        $data = 'Sensitive information';

        // Encrypt the data
        $encryptedData = Security::encrypt($data, Security::getSalt());

        // Save encrypted data to the database or use as required
        $this->set('encryptedData', $encryptedData);
    }

    public function decryptData($encryptedData)
    {
        // Decrypt the data
        $decryptedData = Security::decrypt($encryptedData, Security::getSalt());

        // Use decrypted data
        $this->set('decryptedData', $decryptedData);
    }
}

এখানে:

  • Security::encrypt() এবং Security::decrypt() মেথডগুলি এনক্রিপশন এবং ডিক্রিপশন পরিচালনা করে।
  • Security::getSalt() সিকিউরিটি সল্ট প্রদান করে, যা এনক্রিপশনের অংশ হিসেবে ব্যবহার করা হয়।

২.২. কাস্টম এনক্রিপশন এবং ডিক্রিপশন

যদি আপনি আরও কাস্টম এনক্রিপশন প্রক্রিয়া ব্যবহার করতে চান, তবে CakePHP তে OpenSSL বা অন্যান্য এনক্রিপশন লাইব্রেরি ব্যবহার করা সম্ভব।

// src/Controller/UsersController.php
namespace App\Controller;

use Cake\Controller\Controller;

class UsersController extends Controller
{
    public function encryptCustom($data)
    {
        $encryptionKey = 'your-secret-key';
        $cipherMethod = 'aes-256-cbc';
        $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($cipherMethod));

        // Encrypt the data
        $encryptedData = openssl_encrypt($data, $cipherMethod, $encryptionKey, 0, $iv);

        return base64_encode($encryptedData . '::' . $iv);
    }

    public function decryptCustom($encryptedData)
    {
        $encryptionKey = 'your-secret-key';
        $cipherMethod = 'aes-256-cbc';

        list($encryptedData, $iv) = explode('::', base64_decode($encryptedData), 2);
        
        // Decrypt the data
        $decryptedData = openssl_decrypt($encryptedData, $cipherMethod, $encryptionKey, 0, $iv);

        return $decryptedData;
    }
}

এখানে:

  • openssl_encrypt() এবং openssl_decrypt() ব্যবহার করে কাস্টম এনক্রিপশন এবং ডিক্রিপশন প্রক্রিয়া সম্পাদিত হচ্ছে।
  • AES-256-CBC সাইফার মেথড ব্যবহার করা হয়েছে, যা আধুনিক নিরাপত্তা স্ট্যান্ডার্ড।

৩. এনক্রিপশন কী সঞ্চয়ন

এনক্রিপশন কীগুলি সঠিকভাবে সঞ্চয়ন করা অত্যন্ত গুরুত্বপূর্ণ। সাধারণত, এনক্রিপশন কীগুলো সরাসরি কোডে বা ডেটাবেসে সঞ্চয় করা উচিত নয়। Environment Variables বা Key Management Systems (KMS) ব্যবহারের মাধ্যমে এগুলি সুরক্ষিত রাখতে হবে।

CakePHP তে এনক্রিপশন কী সঞ্চয়ের জন্য আপনি env ফাইল বা ক্লাউড সেবা যেমন AWS KMS ব্যবহার করতে পারেন।

// Example: Load encryption key from environment variable
$encryptionKey = getenv('ENCRYPTION_KEY');

এটি নিরাপদ কনফিগারেশন নিশ্চিত করতে সাহায্য করবে।


৪. পাসওয়ার্ড এবং ডেটা সুরক্ষা

CakePHP তে পাসওয়ার্ড এবং অন্যান্য সংবেদনশীল ডেটার সুরক্ষা নিশ্চিত করার জন্য কিছু সাধারণ নিরাপত্তা পদ্ধতি:

  • Salted Hashing: পাসওয়ার্ড হ্যাশিংয়ের সময় Salt ব্যবহার করা উচিত, যা অতিরিক্ত সিকিউরিটি বাড়ায়।
  • ব্রুট-ফোর্স আক্রমণ থেকে রক্ষা: একটি সিকিউর পাসওয়ার্ড পলিসি প্রণয়ন করুন, যেমন পাসওয়ার্ডের লেন্থ এবং কমপ্লেক্সিটি বাড়ানো।
  • SSL/TLS: পাসওয়ার্ড এবং অন্যান্য সংবেদনশীল ডেটা পাঠানোর সময় SSL/TLS প্রোটোকল ব্যবহার করতে হবে।

CakePHP তে Password Hashing এবং Encryption সঠিকভাবে ব্যবহার করা অ্যাপ্লিকেশনের নিরাপত্তা নিশ্চিত করতে অত্যন্ত গুরুত্বপূর্ণ। Password Hashing পদ্ধতিতে পাসওয়ার্ড কখনোই ডেট

াবেসে সঞ্চিত হয় না, বরং হ্যাশ করা হয়, যা সুরক্ষা বৃদ্ধি করে। অন্যদিকে, Encryption সঠিক কীগুলির মাধ্যমে সংবেদনশীল ডেটা সুরক্ষিত রাখে, যা প্রয়োজন পড়লে ডিক্রিপ্ট করা যায়। সঠিক পদ্ধতি অনুসরণ করলে, আপনার CakePHP অ্যাপ্লিকেশন নিরাপদ এবং সুরক্ষিত হবে।

Content added By
Promotion

Are you sure to start over?

Loading...