質問: $pdo->prepare ( $sql ); $stmt->bindValue ( ':member_id', ( int ) $member_id, PDO::PARAM_INT ); ``` ### 不明点と不安点 まずは、上記のようなPHP対策での不足点などお聞きできれば幸いです。 加えまして、MySQL側でどうすれば良いかで悩んでます。 データベースで個人情報にあたるものを全部同じようにハッシュ化すれば良い?と思ったのですが、それでは元の文字列にできない...ということで、では暗号化(可逆暗号)?と考えているところです。 ``` //インサート時 INSERT INTO `member` (name) VALUES (encode(name,'暗号化キー')); //取得時 SELECT decode(name,'暗号化キー') FROM `member`; ``` このような形にするととりあえずはキーが分からない限りはデータベース情報を全部抜かれたりしても大丈夫...?なのでしょうか...。 (phpMyAdmin上では文字化けしているみたいなデータの見た目になり使いにくいだろうと思うところですが...) 心配なところをあげればキリがないのですが、お詳しい方アドバイス頂けると幸いです。
回答: セキュリティの専門家ではないのですが質問文をみて気づいたことがあるので回答します。 1, sha256を使うのは避けてパスワードハッシュ関数として、password_hashとpassword_verifyを使ってください。 参考)安全なパスワードハッシュ 2, CSRF(cross-site request forgeries)対策は忘れずにしてくださいー 3, 暗号化データの検索に関しては、「**完全一致に関して**」はblind indexが使えると思いますが。 そこまでの要件が必要なかったので調査段階の情報です。 参考) Indexing encrypted data What's the best way to store and yet still index encrypted customer data?