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

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

ただいまの
回答率

90.51%

  • PHP

    24056questions

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

  • HTML

    11510questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Webサイト

    1280questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • HTTP

    647questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • ログイン

    137questions

    ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

PHPで、Webページのパスワード認証処理を書きたい。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 215

WeilSpinor

score -36

パスワードを要求するWebページを作っているのですが、PHPを使って、簡易なパスワード認証のサーバーサイドプログラムを作ろうと思っています。
しかし、PHPのパスワード認証プログラムの記述方法がわかりません。

まず、ログインページのHTMLです。

<body>
<h1>ログイン画面</h1>
<form method="post" action="login.php">
//サーバーに置いてあるパスワード認証プログラムに、
//フォームデータを送信し、
//連想配列$_POST[]に、パスワード入力フォームのnameのkeyとvalueを格納。

    PassWord:<input name="myPW" type="text"><br>//パスワード入力フォーム
    <button id="login" type="submit">log in</button>//ボタンを押すと、送信される
</form>
</body>

これに対して、送信先のプログラムlogin.phpを書こうと思ったのですが、よくわかりません。

基本的には、if文で、
「パスワードが"hogehoge"と一致すれば、目的のWebページのhtmlファイルをブラウザに開かせる。一致しなければ、ブラウザに『パスワードが違います』と表示させる」
と条件分岐させると思うのですが、

「目的のWebページのhtmlファイルをブラウザに開かせる」と、
「ブラウザに『パスワードが違います』と表示させる」
のPHPでの書き方が分かりません。

<?PHP
if($_POST["myPW"] == "管理人が設定したパスワード"){
    //HTTPリクエストを送ってきたブラウザに対し、シークレットページを開かせる。
}else{
    //ブラウザに、「パスワードが間違っています」というメッセージを出す。
};
?>

自分の予想では、おそらく、
「ブラウザのURLを指定して、HTTPレスポンスを返す」という作業をすることになるため、単純ではないと思います。

どうすればいいでしょうか?
ご教示宜しくお願いします。

備考

今回このパスワード認証Webページを作成するに至った経緯は、
Web通信やデータ保存機能を備えたアプリケーションを作るにあたっての予備演習です。

気軽に作れる簡単なアプリだと思ったのですが、
色々な人に、ハードルが高すぎだと言われ、

「まずは、ただWebページにログインするだけの凄く単純なシステムを作ってみて、Web通信の基本を理解するところから始めてみては?」

といわれたので、それなら、
「データベースもユーザー登録も何も使わない、ただ、管理人が決めたパスワードを要求するだけの、パスワード制Webページを作ってみよう」
と思い、作成に至りました。

非常に単純で素朴なアイデアなので、ネットで調べればすぐに出ると思ったのですが、
全然ヒットしませんでした。
初心者向けのログインプログラム作成に関する話題はそこそこあるのですが、
本当に初心者向け説明はほとんどないし、
あったとしてもDBやらcookie、セッション、SQL…などの予備知識を前提としていたりして、
今の目的をはるかに超える複雑さのため、とりつく島もありません。

こんなに簡単なパスワード付きWebサイトのバックエンドプログラム作成について解説したサイトや入門書が存在しない、
というのが不思議でなりません。

何かおすすめのものはないでしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

ログイン機能はセキュリティの肝ですから、簡単なもの簡単なものと探しても、見つからないでしょうね…。
ログインの必要なサイトをスクレイピングすることが目標のようですが、多くのログインシステムは考えうるセキュリティ対策を施しているはずなので、簡単にスクレイピングできるものではないと認識してください。
簡単に突破できるものは即、個人情報流出となる恐れがあるわけですからね。

それをログイン自動化して…となれば、今複雑すぎて云々と言って避けても、いずれやらなきゃいけないことなので、DBやらcookie、セッション、SQL…いずれも熟知する必要があるわけです。

結局覚えなきゃいけないのですよ。

それよりもまず、ログインのないサイトのスクレイピングをするだけの知識や技術はお持ちですか?
個人的には、「スクレイピング」という行為自体が好きではないので、やらないし、teratailでも回答はしないたちですが。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/18 21:34

    ご回答ありがとうございます。
    もちろん結局は熟知しなければならないでしょうが、
    今回は初心者の自分の学習目的なので、
    きちんとコンピューター関連の知識や技術をステップアップしていくためには、ハードルを下げる努力が必要だと思っています。

    「困難は分割せよ」
    このデカルトの教えは全ての基本であるわけで、
    プログラミング熟練者の方々も口をそろえて仰っていることです。

    ログイン技術というものが誕生してからそれなりに時間がたっているでしょうから、
    単純な教育法がそれなりに整備されていると信じて、探そうと思います。

    キャンセル

  • 2019/03/18 21:37

    PHPで固定パスワードでログイン作るより、Basic認証の方が実用的だし、PHPで簡易ログインの記事なんて書いたら、各方面からフルボッコにされるだろうから、探してもないと思う。

    キャンセル

  • 2019/03/18 21:38

    ログインなしのスクレイピングですか?やったことはありません。

    いまは特にスクレイピングをするつもりはないですが…
    (もしかして、以前の図書館ログイン自動化の質問の件を受けてのお話ですか?)

    キャンセル

  • 2019/03/18 21:40

    > 図書館ログイン自動化
    この件はそれにつながるものではないということですか?

    キャンセル

  • 2019/03/18 21:40

    いまは図書館自動簡易ログインの話ではなく、単にログインの仕組みを理解したいだけです。

    キャンセル

  • 2019/03/18 21:42

    そうですか。ご健闘をお祈りします。

    キャンセル

  • 2019/03/18 21:42 編集

    質問文の追記に書いた通り、スマホアプリを作るにあたって、
    Web通信やサーバーの役割、というものの理解の一助として、
    「ログイン制のWebサイトのようなものを作ってみるとよい」
    という助言を頂いたので

    キャンセル

  • 2019/03/18 21:43

    はい、ご声援ありがとうございます

    キャンセル

  • 2019/03/18 21:55

    検索中、別サイトでのKosuke_Shibuya様記事を見つけました。
    知識が追い付いたときに、ありがたく参考にさせていただきます。

    キャンセル

  • 2019/03/18 22:14

    真面目に毎日4、5時間1年くらい続ければ理解できるようになると思います。

    キャンセル

checkベストアンサー

+1

PHPによる簡単なログイン認証いろいろ - Qiita
CSRF対策も書いてあるので参考になるのではないでしょうか。


なお、備考部分ですが。
「Web通信やデータ保存機能」だけなら、ログイン実装の勉強する必要はないと思います。

そのアドバイスは、JavaScript - JavaScriptでログインが必要なページに自動でログインしたい|teratail だと思いますが、その質問内容は「Web通信やデータ保存機能」だけでは実現できないと思います。

そのようなことをするには、正に『DBやらcookie、セッション、SQL…などの予備知識』が必要になります。とりつく島がないなら、まずひとつづつ予備知識を仕入れるしかないでしょうね。
ひとまずは、DB系の知識はなくても大丈夫だと思いますが、cookie、セッション、について知識がないのは色々と厳しいでしょう。

まずは cookie の扱いについてミニマムなコードを書いてみてはいかがですか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/20 13:55

    ご回答ありがとうございます。ちょうど昨日、よさげなphpの入門書をみつけたので、それで勉強しています。

    ログインの勉強の動機は、リンク先のログインアプリを作ることになります。ただ、他の回答者様が、「自動ログインは悪意ある行為」と仰っていたので、続行するかは分かりませんが…。

    でもその過程で色々派生して基礎の勉強になりそうなので、まぁいいか、と思っています。

    キャンセル

  • 2019/03/20 14:57

    私は自動ログイン自体は不正アクセスではないと思います。

    ただ、たとえばブルートフォースアタックのようなパスワードを割る攻撃は、自動化されたログインの繰り返しです。

    キャンセル

同じタグがついた質問を見る

  • PHP

    24056questions

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

  • HTML

    11510questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • Webサイト

    1280questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

  • HTTP

    647questions

    HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

  • ログイン

    137questions

    ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。