質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

6回答

966閲覧

会員登録・ログイン機能を PHP で作成する場合どのような方法がよいでしょうか?

homepage-site

総合スコア70

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2025/04/14 13:25

実現したいこと

会員登録・ログイン機能を PHP で作成したいと考えております。

発生している問題・分からないこと

大手の会員登録サイトを見るとユーザーIDとパスワードとメールアドレスを入力後にメール送信を行い、メールアドレスに届いた認証コード入力して登録成功という仕組みになっているようですが、認証コードのみでセキュリティを強化できるのでしょうか?

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

認証機能や会員登録機能について調べてみたところ認証コードを送信するというタイプのものがなくセキュリティ対策として最適なのか疑問です。

補足

※参考サイト
https://begginerkun.hatenablog.com/entry/2022/06/08/110752

https://note.com/koushikagawa/n/n9c6e396e2687

https://kekenta-it-blog.com/php-login-app/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

あえて一般論から書き始めますが、「何のサービスも提供しないことで、セキュリティ問題が発生することそのものを避ける」という手段を除いて、あらゆるセキュリティ手段は特定の種類の脅威への対策です。

そして、「何一つ意味がない、おまじないレベルのもの」や「セキュリティ対策のつもりが別な脆弱性になっていたもの」などは論外として、有意なセキュリティ対策の評価は、見込める効果のみならず、実装の手間・運用コスト・ユーザーへの影響などを考えた総合的なものとなります。たとえば、「2段階認証でSMSを必須とする」ような対策は、銀行であれば求められるかもしれませんが、コミュニティサイトではユーザーにかける手間やコスト問題で不適当となるかもしれません。

極端な話、「登録フローを面倒にする」ような技術的要素が弱い「対策」でも、「カジュアルな荒らしの登録を減らす」という観点で見れば有効ということがありえます。


「認証コードのみでセキュリティを強化できるのでしょうか?」とありますが、少なくともこの対策はゼロやマイナスにはならないものです。どのような攻撃に対するどの程度の防御になるのか(もし、全く意味がないという結論に至ったとしたら、その推論の過程はどのようなものか)、それを考えてみましょう。

投稿2025/04/15 13:12

maisumakun

総合スコア146544

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2025/04/15 13:19

> 参考サイトを見たところ認証コードを入力させるものがなくセキュリティ対策として十分なものか疑問です。 「ゼロデイアタック」といって、攻撃者のほうが先にソフトウェアの脆弱性を見つけ出して、対策がなされていないところに攻撃を仕掛けてくる、という事例も決して珍しくありません。「書かれていないから無意味」というのは、正しい態度ではありません。
homepage-site

2025/04/16 04:16

maisumakunさん回答ありがとうございます。 皆さんからアドバイス頂いた対策についてどのような意図があるのか調べながら整理してみます。 攻撃手段についても調べておいた方が良さそうですね…
guest

0

他の方の回答とだいたい同内容ですが、簡単にまとめると、

● 「会員登録」で、入力されたメールアドレスにコード送信
これは、主に入力されたメールアドレスが正しいものであるかどうかを確認するためのものであり、基本的にはこの部分のセキュリティは重要ではありません。

● 「ログイン」で、登録されたメールアドレスにコード送信
これは、「二要素認証」のための手順であり、utm.さんの回答にあるとおり、所持を確認するためのものです。この部分でのセキュリティは、入力回数制限/タイムアウトとコードのリセットで充分な強度が得られます。

投稿2025/04/15 01:25

TakaiY

総合スコア14286

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

homepage-site

2025/04/15 02:39

TakaiY さん回答ありがとうございます。 認証コードはメールアドレスを確認するものでセキュリティ対策にはならないんですね勉強になりました。 ログインの度にメールが送られてくるものがあって気になっていたのですがセキュリティ対策用だったのを初めて知りました、二要素認証が一番セキュリティ対策として良さそうですね。
TakaiY

2025/04/15 07:24

> 認証コードはメールアドレスを確認するものでセキュリティ対策にはならないんですね ちがいます。そんなことは書いてないつもりです。 > ログインの度にメールが送られてくるものがあって気になっていたのですがセキュリティ対策用だったのを初めて知りました 2要素認証とはまったく関係ありませんが、漏洩や乗っ取りに遭った場合に気づくための措置です。 > 良さそうですね 質問の主旨とは違うし、勘違いされているようにも思ってちょっと心配です。
homepage-site

2025/04/16 04:12

TakaiYさん回答ありがとうございます。 認証コードはなりすまし対策として有効なようですね勘違いしておりました申し訳ありません。 2要素認証について認識の違いがあったのですが、ログインの度にコードを送信してそれを入力させるということでしょうか?
TakaiY

2025/04/16 04:38

> ログインの度にコードを送信してそれを入力させる はい、そうです。 そうすることで、パスワードを盗み見られても勝手にログインされる心配はなくなりますので、強度が高いということです。
homepage-site

2025/04/18 06:55

TakaiYさん回答ありがとうございます。 miyabi-sunさんにアドバイス頂いた方法も検討しながら考えてみます。
guest

0

※ガバガバ回答します

認証によるセキュリティには
記憶、所持、生体認証(生物的な認証)があります、

パスワードの入力、キーワードの入力(昔飼ってたペットの名前だとか誕生日だとか)は記憶になります。
簡単に盗むことや予測することが出来ます

メールアドレスでの認証、ワンタイムパスワード(使い捨てできる保有パスワード)などは所持になります、
ユーザーを認証する上で乗っ取りや物理的な盗難、盗聴出ない限り突破することは難しいです、

生体認証は指紋、虹彩、声などがあります。
忘れたり、失ったりしないものの、同様にコピーして、盗むことは出来ます。

さて、質問にあるようなパスワードの入力時のメール認証ですがこれは、ユーザー登録の際に「そのメールアドレスが実際に使われており、ログインユーザが所持しているものか」を判別するものです。
セキュリティの観点からみて、流用できますがメールアドレスが生きているか確認するものであり、質問の内容としては若干の違和感はあります。

投稿2025/04/14 16:43

utm.

総合スコア784

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

utm.

2025/04/15 01:44

あ、ログインの話をしているのか。 自分の方で整理出来てませんでした...
homepage-site

2025/04/15 02:53

utm. さん回答ありがとうございます。 認証でも3通りセキュリティ対策があるんですね勉強になります。 セキュリティ対策として二要素認証、パスワード紛失時の再設定として認証コードを考えてみます。
guest

0

ベストアンサー

認証コードのみでセキュリティを強化できるのでしょうか?

どこが質問ポイントなのか2通りありそうです。どっちですかね?
・メールアドレスの検証をすることに意味があるのか?
・メールアドレスを検証はするのだが、その際に、メール中の長いURLクリックでなく、数桁の認証コードで十分なのか?

・メールアドレスの検証をすることに意味があるのか?
メインは、誤ってタイプミスのメールアドレスを登録してしまうことの防止でしょう。
メールアドレスを手打ちする人は少なからずのようです。コピペでもコピーミスで1文字少ないとかあり得ます。

誤登録のメールアドレスがたまたま実在の他人のメールアドレスだったりすると、その人にアカウントを乗っ取られてしまう可能性もあるので、そういう意味ではセキュリティー対策とも言えます。メールアドレスがそのままidになっているケースとか、そうじゃなくてもidが書いてあるメールが送られるようだとパスワード再設定出来そうです。

・メールアドレスを検証はするのだが、その際に、メール中の長いURLクリックでなく、数桁の認証コードで十分なのか?

何文字以上あれば安全で、何文字以下であれば危険という境目はないので、程度の問題としか言い様が無いです。
ただ、赤の他人がメールを受け取ってその認証コードを使おうとしても、おそらくいま認証コード入力待ちのセッションを乗っ取らないと駄目な気がするので、短くても良いのかもしれません。厳密に考え出すと切りが無いですが。
長いURLクリックは、PCで登録作業して、スマホに届いたメールのURLをクリックして通ったことがあるので、少なくともその場合はセッション乗っ取り不要ということだと思います。

また、「メール中の長いURLクリック」の方が利用者は楽でしょうが、不正メール対策で「メール中のURLクリックはしない主義」の人もいるかも知れません。「メール中のURLクリックは原則はしないが、必要があれば十分確認してから」という普通の人の場合は、HTMLメールだったりすると「本当のリンク先」を確認するのが面倒なので、テキストメールが良いかと思います。

投稿2025/04/14 14:29

otn

総合スコア86293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

homepage-site

2025/04/15 02:34

otn さん回答ありがとうございます。 メールアドレスの検証をすることに意味があるのかの方になります。 参考サイトを見たところ認証コードを入力させるものがなくセキュリティ対策として十分なものか疑問です。 パスワードの再設定は導入すべきだと思っていたのですが、その場合はメールアドレスを ID にした方が有効だと覚えておきます。 認証コードの入力に30秒以内など時間制限を設けた方がセッション乗っ取り対策になりということでしょうか? URL を踏ませてクリックさせることでセキュリティ対策になると思っていたのですが、テキストメールでも問題ないのですね…
otn

2025/04/15 04:58 編集

> メールアドレスの検証をすることに意味があるのかの方になります。 であれば、検証方法は質問と関係ないということでは? > 参考サイトを見たところ認証コードを入力させるものがなくセキュリティ対策として十分なものか疑問です。 いずれの方法でも誤ったメールアドレスを登録してしまうことの防止にはなるのでどちらでも同じかと。 > パスワードの再設定は導入すべきだと思っていたのですが、その場合はメールアドレスを ID にした方が有効だと覚えておきます。 どこからそう思ったのですかね?どんな有効性があると思うのでしょうか? ・メールアドレスをIDにする・・・・利用者は新たにIDを覚えなくて良いので楽だが、メールアドレスは公知な情報 ・独自にIDを決めてもらう・・・・利用者は新たにIDを覚える必要が出てくるが、公知な情報では無いのでセキュリティー的には多少まし > 認証コードの入力に30秒以内など時間制限を設けた方がセッション乗っ取り対策になりということでしょうか? セッション乗っ取り対策はいずれにせよすべての場面に置いて必要です。制限時間を設けることで、セッション乗っ取り対策に穴があった場合でも乗っ取りリスクを減らすことは出来ると思いますが。 そもそも、「登録しようとした人のメールアドレス入力ミスで、たまたま認証メールを受け取ってしまった赤の他人が、その登録ミスした人のセッションを乗っ取ろうとその瞬間に思いつく」ことがあったにせよ、サイト名が分かっても、どこの誰とも知れぬ人のセッションを乗っ取るのは無理な気がします。 > URL を踏ませてクリックさせることでセキュリティ対策になると思っていたのですが、テキストメールでも問題ないのですね… URLをクリックさせるメールが、HTMLメールでくると、普通は「詐欺メール」と思っちゃうので、HTMLメールは避けた方が良いでしょうね。クリックさせる部分が、AタグでなくてテキストだけでURLを書いてあるのならいいですが、テキストメール中にURLがあると自動的にリンクにしてくれるメールソフトもあるのでテキストメールの方が親切です。 「利用者はセキュリティー意識の低い人ばかりである」という前提があるならHTMLメールでも良いかと。
homepage-site

2025/04/16 05:17

otnさん回答ありがとうございます。 検証方法については別途お聞きすべきでした申し訳ありません。 「メールアドレスがそのままidになっているケースとか、そうじゃなくてもidが書いてあるメールが送られるようだとパスワード再設定出来そうです。」と教えていただいたので、メールアドレスをそのままidにした方がよいのではないかと思い込んでおりました… セッション乗っ取り対策として時間制限は他の登録サイトを見てから決めてみます。 詐欺メールと考えてクリックしないという考えはありませんでしたが、アドバイスを頂いてテキストメールにすることに決めました。
otn

2025/04/17 17:49 編集

> 検証方法については別途お聞きすべきでした申し訳ありません。 登録時に入力したメールアドレスが間違ってないかという確認のプロセスであれば、 セキュリティーレベルについては、①メール内のURLを開く、②メール内の数桁の数字を先ほどの画面に入力(セッション管理をしている前提)、の2つの差は誤差の範囲だろうというのが私の回答です。もともとほとんどリスクがない(誤入力したメールアドレスが実在した場合にその所有者しか攻撃者になれない)ので、それより小さい範囲で比べても意味が無い。 正しく入力した自分のメールアドレス宛に届いたメールが漏れているという事態であれば別ですが、そんな事態や、スパイウェアを仕込まれているような事態だと、普通のシステム設計者が心配することでは無いです。 「登録時に入力したメールアドレスが間違ってないかという確認」以外のケース(一般的な二要素認証)については、全体総合的な判断になるかと思います。今回の質問とはジャンルが違うので、一般的な二要素認証については調べてみてください。挙げられている2つ以外の方法もありますので、かならずしもメールを使う必要は無いです。スマホなど電話を使うなど。 メールでの確認が絶対必須なのは「登録時に入力したメールアドレスが間違ってないかという確認」をしたい場合だけ。 > 「メールアドレスがそのままidになっているケースとか、そうじゃなくてもidが書いてあるメールが送られるようだとパスワード再設定出来そうです。」と教えていただいたので、メールアドレスをそのままidにした方がよいのではないかと思い込んでおりました… idとメールアドレスだけ知っていればパスワード再発行できるサイトは少なからずです。idイコールメールアドレスならメールアドレスだけ。 id と メールアドレス以外に追加の質問があるサイトもありますが、アカウント作成時に生年月日・電話番号などや、あるいは「好きなペットは?」などの秘密の質問3つとかを登録する仕組みがなければ、追加の質問のしようがない。 それくらいは皆さんご存じと思っていたので、そのように書いたのですが、今まで「パスワード再発行」とか一切したことがなくどんな情報があれば再発行できるのか、考えたこともなかったということですかね。 > 詐欺メールと考えてクリックしないという考えはありませんでしたが、 はあくまで、「URLをクリックさせるメールが、HTMLメールで来た」という一般論です。 とあるサイトからの、メール認証のメールを、いままさに待っている状態だと、そのサイトからのメール認証を求めるHTMLメールだと、何もかも信用しないレベルの人でない限り、HTMLソースを確認せずにクリックしそうです。 まあ、宅配便が1時間以内に来るはずだと待っている状態で、インターフォンで「宅配便でーす」と言われたら不用意にドアを開けてしまう人多数(私も開けてしまうと思います)だと思いますので、それと同じレベル。 もちろんテキストメールが良いのは書いた通りですが。
otn

2025/04/17 23:52 編集

> ・メールアドレスの検証をすることに意味があるのか? この理由に追加。 誤入力のメールアドレスが実在した場合にその人に一方的に各種案内メールが送りつけられ迷惑を掛ける。 「このメールに心当たりが無い場合は、ここをクリック」のようなことが書いてあることもあるけど、それ自体が詐欺かも知れないので、そこをクリックはせずに、迷惑メール登録するのが普通かと思います。 で、そういう迷惑メール登録が積み重なると、あなたのサイトから送るメールがあちこちで迷惑扱いされることになる。それ以前に、赤の他人に迷惑を掛けたことを反省すべきですが。 さらに悪いケースとして、悪意の人が、「こいつ気に入らない」と思う人のメールアドレスを知っている場合、嫌がらせをしようと、勝手にそれを登録する。 寿司屋に電話して「3丁目の田中ですけど、にぎり寿司100人前を今晩届けてください」的ないたずらというか犯罪ですね。 まあ、迷惑メール程度で、意図的じゃないので、刑事罰にはならないでしょうけど。
homepage-site

2025/04/18 07:02

otn さんアドバイスありがとうございます勉強になりました。 パスワードの再発行は導入されているサイトもあればそうでない場合もあるため最初の段階では考えておりませんでした。 二要素認証についてもう少し深く調べてみます。
otn

2025/04/20 12:10

> パスワードの再発行は導入されているサイトもあれば お金が絡むと再発行は必須ですね。SNSも、過去の投稿との連続性がなくなるので普通はあるかと思います。 アカウント数が少ないなら、「パスワードを忘れた方は下記にメールでご連絡ください」という全手動もありですが、再発行自体は必要です。 > そうでない場合もあるため 「アカウント作り捨て歓迎」みたいなサイトならパスワードの再発行不要でしょう。パスワード忘れたら新規でアカウント作ってもらえばいい。そもそも会員登録制度自体要らないのかも。 やりたいことが違えば、実現手段も違うのは当然です。目的の異なるサイトを参考にしちゃ駄目です。 そもそも何故、会員登録の仕組みを作ろうとしたのかを掘り下げて考えれば、要不要は自明でしょう。 通販サイトでも、会員登録の仕組みの無いところもありますね。昔は電話やFaxで注文を受けていて、電子メール化してさらにウェブ化しただけで、顧客管理の考え方が無いとかでしょうね。
guest

0

大手の会員登録サイトを見るとユーザーIDとパスワードとメールアドレスを入力後にメール送信を行い、
メールアドレスに届いた認証コード入力して登録成功という仕組みになっているようですが、
認証コードのみでセキュリティを強化できるのでしょうか?

その部分はセキュリティとは一切関係はありません
登録した「そいつ」が、メールアドレスを受け取って読んでくれるか否かの確認がしたい
もっと噛み砕いて説明すると、使わない架空のメールアドレスを使って登録してくるひやかしを蹴りたいと言ってるだけです

何故登録者が読んでくれるメールアドレスが欲しいのか?
パスワードを忘れてしまった場合の再発行手続きや、
住所変更等の手続きで本人確認の労力を減らす為に2段階認証がしたいというケースです。

利用者本人に本当に大事な通知を行う為に「私を信じてメールアドレス登録してください」という形になっています。


あなたが作りたいと思っているサービスは本当にメールアドレスを保管・管理する価値があるサービスなのですか?

例えば個人で運用している小さなサービスで、
寧ろカスタマーサポートから逃げたいんだが?と思ってる程であれば
GoogleやAppleのIDを使ってログインするOAuthに徹して
自分のサービスでは一切メールアドレスやユーザーの個人情報を持たないという運用も考えられます。

もし私が一人で何かしらのWebサービスを作るとなった場合、
まずこの運用から考えます。

逆に企業でサービスを作りましょうって言ってて
社長から命令されている立場なら、メールアドレスの収集からは逃げられないでしょうね。
マーケティングの世界ではメールアドレスは≒金であり、よく社員が勝手に抜き出して業者に売ったりして捕まったりしてますし
そこはしゃーなしなので、漏洩しない良いサービスを作れるよう頑張ってください。

投稿2025/04/16 11:37

miyabi-sun

総合スコア21400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

homepage-site

2025/04/16 12:28

miyabi-sun さん回答ありがとうございます。 ひやかしを除外するという発想はありませんでした勉強になります。 個人で運用する予定のサービスなので個人情報保護を考慮すると Google でのログインにした方が良さそうですね… 掲示板を作成中なのですが、セキュリティ上誰しもが書き込める状態だと危ないとのアドバイスを頂き、そちらに書き込む際のステップとしてログイン制度を考えております。
guest

0

6桁の数値を返すなら100万通りの確率になります。一時的な確認には十分な提案でしょう。Eメールで言うとパスワードの変更(パスワードを忘れたときなど)にも使われており、Eメールの個人特定と利便性を活用する必要十分な仕組みだと言えます。逆にいえばEメールサーバーへのログインについては個人の責任でセキュリティを管理してくださいという切り分けになります。ランダム攻撃の防止用にリトライ回数制限や失敗回数でのロック機能などは別途検討が必要です。

100万通りを安全でないとするならもちろん入力を英数記号まで拡張したり桁数を増やせばセキュリティはあがりますが、数字以外の入力はミスを誘発するためフールプルーフとしては推奨されません。

投稿2025/04/15 00:30

編集2025/04/15 00:32
yambejp

総合スコア117667

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

homepage-site

2025/04/15 02:43

yambejp さん回答ありがとうございます。 パスワード再設定の方法として認証コードは有効ということで覚えておきます。 ランダム攻撃の防止用にリトライ回数制限や失敗回数でのロック機能、その他にも有効なものがないか調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問