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

wave
มานพ กองอุ่น 23 ก.ย. 2020 19:27:29 5,577

หลายๆ ครั้งที่ข้อมูลที่มีความสำคัญ เช่น ชื่อ นามสกุล หมายเลขบัตรประชาชน หรือแม้แต่หมายเลขบัตรเครดิต หากทำให้เกิดความปลอดภัยมากขึ้นเราควรเข้ารหัสข้อมูลเหล่านี้ในฐานข้อมูลด้วยเช่นกัน ซึ่งปกติแล้ว หลายๆ 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 ได้ 


ความคิดเห็น

หากบทเรียนรู้มีความผิดพลาดประการใด หรือมีข้อเสนอแนะกรุณาแจ้ง contact@programmerthailand.com

เขียนบทเรียนรู้ของคุณ

รายละเอียด
  • ดู 5,577
  • รักเลย 0
  • หมวดหมู่ Yii Framework 2 (Yii2)
  • เขียนเมื่อ
  • แก้ไขเมื่อ
  • Tags yii yii framework encrypt decrypt
ข้อมูลผู้เขียน
มานพ กองอุ่น

มานพ กองอุ่น

เป็นสมาชิกเมื่อ: 18 ธ.ค. 2009

เนื้อหาที่เกี่ยวข้อง