【Laravel】保存・更新時に特定のカラムを自動で暗号化(復号化)させる2019-07-16【Laravel】保存・更新時に特定のカラムを自動で暗号化(復号化)させるlaravelTweetシステムを実装する上で、個人情報の暗号化は必ず対応すべき事です。Laravelの場合、エンクリプタが用意されていますので処理自体は非常に簡単です。readouble.comしかし、ルートやキー毎に手動で暗号化と復号化処理を入れるのは手間です。今回はモデル設定で、暗号化と復号化を自動で行えるようにする方法について記載します。データ保存(更新)時、取得時に処理を差し込むには?ミューテタとアクセサを設定する事で、データ保存時、取得時に処理を挟む事ができます。ミューテタが保存(更新)時、アクセサが取得時にそれぞれ設定できます。readouble.comもちろん、ミューテタかアクセサどちらか片方だけ設定する事も可能なので、出力時だけ加工をするという事も可能です。ミューテタミューテタを定義する場合は、set(カラム名)Attributeという関数を作成します。ミューテタを定義するにはアクセスしたいカラム名がFooの場合、モデルに「ローワーキャメルケース」でsetFooAttributeメソッドを作成します。ミューテタの定義より出典アクセサアクセサを定義する場合は、set(カラム名)Attributeという関数を作成します。Case)」でFooの場合、getFooAttributeメソッドをモデルに作成します。Userモデルでnameという日本語名を管理するカラムがあるとします。入力した値を保存する時は暗号化し、出力時は復号化された状態で取得する場合は次のように設定します。上記の指定をする事で加工をせずに保存処理をしても、自動で暗号化されます。データベース上は暗号化された状態で格納されます。データベース上は暗号化された状態で格納されます。特殊な処理をせず取得するだけです。暗号化するとデータベースから平文で検索できなくなるという問題があります。それ以外に特有の問題もあります。空の入力でも暗号化の文字が入ってしまいNullに出来ない入力値をPOST(あるいはPUT)で保存(更新)する際に、入力がなくても暗号化処理されたデータが入ってしまいます。対象のカラムを空にして保存した直後にのデータを見ると、下記のようにNullではなく暗号化されたデータが入っていると思います。11:24:16",未入力時は入力値をNullにする入力値を取り出すだけのカラムであれば特に支障はありませんし、復号すれば判定できます。入力の有無の判定だけであれば、復号前にやってしまいたいものです。その場合は、ミューテタとアクセサそれぞれにnullの場合の処理を追加します。}}DBファザードから直接データ取得するとミューテタが機能しないミューテタはあくまで、モデルからデータを取得した場合のみ機能します。そのため、DBファサードのを使用して対象モデルのテーブルを指定しても、値を取り出し時にミューテタは機能しません。13:24【Laravel】保存・更新時に特定のカラムを自動で暗号化(復号化)させるTweet関連記事2020-01-15【DataTables】独自の検索機能を追加するWebサービスを構築する際に、通常のサービスとは別に管理画面が...2019-01-10【AWS】【CloudWatch】異常で止まったインスタンスを自動で再起動させる最近サーバーの復旧作業を行う機会がありました。原因は恐らく...2018-11-18【javascript】【php】原始的な方法でフロントエンドとバックエンドのデータ連携について考え...PHPとjavascriptを扱う案件の場合、フロントエンドとバックエン...2018-04-08【Redmine】Backlogの「完了理由」フィールドを再現する案件によって、BacklogとRedmineを使い分けています。両方使っ...2018-04-07【ドメイン設定】VPSにSSL対応ドメインを設定する確定申告が無事終わりました。WebSandBagスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。