こんにちは、趣味で PHP を触っています。
とても初歩的な質問になってしまうと思いますが、よろしくお願いします。
PHP では crypt 関数で暗号化することができるらしいのですが、実際にこれを使わなければいけない場合とはどのような時なのでしょうか?
http://jp2.php.net/manual/ja/function.crypt.php
PHP で処理したことを MySQL などのデータベースに書き込む場合、主にサーバー内での処理なので外部から見られることなんてないと思っていましたが、見ることは可能なのでしょうか?
それともう一つ質問がありまして、マニュアルには「復号するための関数はありません。 crypt() が使用しているのは単方向アルゴリズムだからです。」とありますが、それだと暗号化すると二度とその情報が何かわからなくなるのではないでしょうか?
何か複合化する方法があるのですか?
よろしくお願いします。
No.4ベストアンサー
- 回答日時:
LinuxなどのUnix系OSは、ディレクトリや操作の行える権限を付加したユーザを作成することが出来ます。
これは例えばレンタルサーバに登録してFTPなどでアクセスした場合に、自分自身のアカウントのみ
アクセスすることが出来るのは、登録したユーザに操作やアクセス権限を付加したからです。
では、そのユーザIDとパスワードの管理はどのように行っているかというと、
パスワード管理用のテキストファイルを作成し管理しています。
ではこのファイルを何らかの方法(サーバの脆弱性をついたりとか)で、
例えばPHPアプリケーションから開けてしまったとした場合、
全部のユーザのIDとパスワードが見えてしまうわけですが、このファイルは、Unixの標準的な
crypt関数にてパスワードを暗号化してファイルに保存されています。
このように管理すれば万が一パスワードを保存しているファイルを参照されてしまっても、
パスワードが復元不可能な形式で保存されておりますので、すぐにパスワードを利用して
FTPなどでアクセスする、ということが出来なくなります。
PHPのcrypt関数の由来は恐らく上記のものと思います。
ではcrypt関数は具体的にどのようなものかといいますと
<?php
echo crypt('aaaaa', 'hoge');
?>
とした場合、echoされる文字列は「ho9xbp3QsjfW6」となります。
第一引数の文字列と第二引数のsaltが同じであれば返る値も必ず同じになります。
これを利用して、
---password.txt------
{暗号化されたパスワード文字列}
---main.php----------
<?php
$password = $_POST['password']; //フォームなどで送信されてきたパスワード
$check_pass = file_get_contents('password.txt'); //正しいパスワードが保存してあるファイルを開き値を取得
if($check_pass == crypt($password, 'hoge')){
echo "OK";
}else{
echo "NG";
}
?>
としてやれば、ユーザが送信したパスワードを(saltをhogeとした)crypt関数にて、暗号化したものと
暗号化して保存してあるパスワードを称号して、同一だったらログインさせる、といったことが
可能となります。
最近では、crypt関数は、暗号強度が弱いということでmd5関数にて、暗号化(ハッシュ化)することが
一般的のようです。
mysqlに格納するパスワードを不可逆暗号化をするのは回答の最初に述べた理由と同じ由来なのだと思います。
(mysqlもユーザID/パスワードを割り振ってアクセスするデータベースの権限とかを発行できる為)
とりあえずは、数あるセキュリティや個人情報保護の方法のうちの一つで、一般的な作法であると
認識していればいいのかなぁと思います。
皆さん!大変ためになるアドバイス本当にありがとうございます!
かなり忙しくて返事できずにいましたが、しっかりと読ませていただきました!!
さっそくいろいろ試したいと思います。
本当に勉強になりました!
ものすごく感謝しています!
またよろしくお願いします!!
No.3
- 回答日時:
ただのcrypt関数は元のデータが一切分からなくなりますよ。
じゃあ、どこで使用するかといいますと、
よく使うのは掲示板書き込みやコミュニティーサイトのパスワード
例え管理者でもログインパスワードが何らかの手段を用いれば見られるのは好ましくありません。
(IDとパスワードは複数のサイトで同じ物を使ってるとか、よくあるからね)
使い方は
保存するパスワードをcryptで暗号化し、ログインする時に同じcryptで暗号化し、同じ文字列が出てきたら、その暗号化する前のワードも同じと判断します。
後は使用者のID
主には多重ログインやなりすまし対策ですね。
2ch等でIDという物がありますが、あれはIPアドレスなどをcryptで暗号化していたりします。
これを行う事によって、利用者から自作自演が分かったりするのです。
No.2
- 回答日時:
ANo.1です。
回答しきれていない部分がありました。
単方向アルゴリズムについての解釈は合っています。
私が書いた例でいえば、可逆なアルゴリズムであるよりも不可逆な方がセキュリティ面で効果が高いということになります。
いくら暗号化しても複合化する手段があれば元のデータを見ることができるわけですから。
No.1
- 回答日時:
よく使われるケースとしては、パスワードを暗号化してデータベースに格納するというのがありますね。
生のパスワードを保存しないことで漏えいなどに対するセキュリティを高める効果があるものと思います。
私なら同様のことをする場合はもっぱらmd5関数を使いますが。
http://jp2.php.net/manual/ja/function.md5.php
ちなみに、crypt関数のマニュアル中に載っている、拡張モジュールであるmcryptを使えば複合可能な暗号化を行うことができます。
http://jp2.php.net/manual/ja/ref.mcrypt.php
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL 【投稿情報用データベース posts】は必要ないと思います。 1 2022/06/02 21:25
- その他(セキュリティ) IDと暗証番号・パスワードの管理の画期的かつ簡単便利な方法を考案した。他人に検証してもらう方法は? 5 2023/02/08 08:49
- その他(SNS・コミュニケーションサービス) 書き込んだ場合、同サイトの同ページに出てこない? 1 2022/05/24 02:44
- PHP PHPの変わった閉じタグの必要性と意味を教えてください。 1 2022/08/28 15:15
- MySQL [1000地域 × 10カテゴリー = 1万件のテーブル]!グループ化? 1 2023/06/14 23:56
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- PHP バージョン情報の取得方法について 1 2023/03/15 11:56
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpでクラスのメソッドで同名の...
-
phpでPEAR::DBを使っているので...
-
phpでcookieがうまく保存されない
-
値の取り出し方について教えて...
-
入力した部分を表示させたまま...
-
PHPとHTML+Xamppの掲示板で画像...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
-
なんでブラウザでPHPを動かすた...
-
入力フォームの空白や改行を制...
-
PHP8を使うと、大量のWarningが...
-
どうして送信されないのでしょ...
-
php 入力画面から確認表示画面...
-
プログラムコードを入力する場...
-
メールフォームのタイトルが文...
-
php 完了画面の送信メールのコ...
-
phpのメールフォームの完了画面...
-
画像ファイルの名前をそのままU...
-
PHP と MySQL でテーブルの行数...
-
awsにApacheとPHPを入れて、何...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
重複を防ぐ記述について教えて...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
-
PHPでユーザー情報を入力して簡...
-
ワードプレスサイト PHP8.0.25...
-
php 完了画面の送信メールのコ...
-
SFTPなどは使わないホームペー...
-
PHPのセッション有効期限について
-
csvファイルについて教えて下さ...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで訪問回数を表示するカウン...
-
ファイルアップロードに関して...
-
掲示板を作成しておりアップロ...
-
Q&Aサイトを作成していてURLの...
おすすめ情報