ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

Yii Framework 2 (Yii2)

การเข้ารหัสข้อมูลที่สำคัญในฐานข้อมูลด้วย Yii2

หลายๆ ครั้งที่ข้อมูลที่มีความสำคัญ เช่น ชื่อ นามสกุล หมายเลขบัตรประชาชน หรือแม้แต่หมายเลขบัตรเครดิต หากทำให้เกิดความปลอดภัยมากขึ้นเราควรเข้ารหัสข้อมูลเหล่านี้ในฐานข้อมูลด้วยเช่นกัน ซึ่งปกติแล้ว หลายๆ Database ก็มีความสามารถเช่นกัน เช่น MySQL, MariaDB ที่มี AES_encrypt/AES_decrypt เป็นต้น

อีกส่วนหนึ่งเราสามารถใช้คุณสมบัติของ Yii2 ได้โดยใช้ security component ซึ่งมี method ให้เรียกใช้ เช่น encryptByPassword(), encryptByKey() เป็นต้น ดูรายละเอียดเพิ่มเติมได้ที่ https://www.yiiframework.com/doc/api/2.0/yii-base-security

ในที่นี้เราจะใช้ method beforeSave() ในการเข้ารหัสข้อมูล และ method afterFind() ในการถอดรหัสข้อมูล ซึ่งเป็น method ใน Model โดยการเพิ่มเข้าไปลักษณะนี้

/**
     * @param bool $insert
     * @return bool
     */
    public function beforeSave($insert)
    {
        $this->setAttribute('name', base64_encode(Yii::$app->security->encryptByKey($this->name, '123abc')));

        return parent::beforeSave($insert);
    }

    /**
     * 
     */
    public function afterFind()
    {
        $this->setAttribute('name', Yii::$app->security->decryptByKey(base64_decode($this->name), '123abc'));
        
    }

จาก code ด้านบน เราจะเห็นว่ามีการเข้ารหัส 2 ชั้น เนื่องจาก Yii2 การเข้ารหัสจาก encryptByKey() นั้นจะทำให้ได้อักขระที่ไม่ unicode ดังนั้นเราก็เลยใช้ base64_encode() อีกรอบแล้วค่อยบันทึกลง database โดยที่ 123abc คือ key ของเรา (สามารถ generate ได้จาก Yii::$app->security->generateRandomKey())  name คือ attribute ที่เราต้องการ encrypt/decrypt

เพียงเท่านี้เราก็สามารถใช้งานการเข้ารหัสข้อมูลได้แล้ว 

หมายเหตุ ยังไม่สามารถใช้กับการ search ได้ 

ติดปัญหาตอนทำตาม? ถามในชุมชน

ความคิดเห็น (0)

ยังไม่มีความคิดเห็น — เริ่มคุยเป็นคนแรก ถามสิ่งที่สงสัย หรือแชร์ประสบการณ์ของคุณ