BASIC認証のユーザー名パスワードをHTMLのフォームで処理できるか試してみた

PHPとHTMLでBASIC認証のログイン処理を作って見てから気がついたんですが、InternetExplorer7では

http://ユーザー名:パスワード@localhost/

みたいなURLが無効になっているので、PHPやHTMLを用いた方法では出来ない事はできなさげです。

どうしてもBASIC認証をHTMLベースでやりたい場合は、モジュールを使うのが良さそうです。

いつのバージョンから含まれているのか判らないですが、Apacheに mod_auth_formっていうのが含まれているそうです。

他にも、同名のモジュール(中身は別物)で二つほど同じような事を実現するモジュールを作成されている方がいるようで。

mod_auth_form

mod_auth_form

どちらもちょっと古いので、Apacheに含まれているのを使った方が良さそうですが。

今後は公式の mod_auth_form を使ってHTMLでBASIC認証するようになるんでしょうね。

ではここからが試してみた事のメモ。

WEBサイトに認証をつけたい、けど、BASIC認証のダイアログは嫌だ、というよくわからない依頼、たまに有りますよね。認証処理を別途設置するコストを考えると、なんか無駄だなー、と思うんですが。

で、ちょうど人に聞かれたので、BASIC認証でダイアログ出さずに処理出来るか、ちょっとやってみました。

こんな感じになりました。
http://firstlife.jp/demo/20090628/login.html

で、以下がやり方。IE7で動かないので使う人も居ないだろうけど。

BASIC認証の設定方法は、Googleあたりで調べて貰うとして、BASIC認証がかかった領域の外に、以下の様なHTMLとPHPを置きます。

login.html


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login</title>
</head>
<body>
<form action="login.php" method="post">
username : <input type="text" name="username"><br />
password : <input type="password" name="password"><br />
<input type="submit">
</form>
</body>
</html>

login.php


<?php
$username = htmlentities($_POST['username']);
$password = htmlentities($_POST['password']);

if($username==""||$password==""){
	header('location: login.html');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>login</title>
<meta http-equiv="Refresh"content="0;url=http://<?php echo $username?>:<?php echo $password?>@firstlife.jp/demo/20090628/restrict/">
</head>
<body>
自動でログインしない場合は<a href="http://<?php echo $username?>:<?php echo $password?>@firstlife.jp/demo/20090628/restrict/">こちら</a>
</body>
</html>

で、login.htmlにアクセスすると上に書いたアドレスのような動きになります。

そうそう、ログインが失敗した時用に .htaccess に


ErrorDocument 401 /demo/20090628/login.html

みたいに書いておくと、ログイン失敗時もログイン画面に戻るのでいいかもね。

とまぁ、こんな感じです。モジュールの方はまた時間のあいたときに試してみます。



このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

コメント / トラックバック 4 件

  1. cc より:

    会社検索のサイトなんですが、会社情報の無断記載になりますので即時閉鎖をお願い申し上げます。

  2. kenji0302 より:

    cc さま
    貴重なご意見ありがとうございました。

    まだ開発途上のものですので、掲載された会社さまに対する配慮まで手が回ってないという部分が確かにございます。
    その点はお詫びし、今後の改善に勤めるようにいたします。

    ただ、中の情報につきましては改正著作権法(国会で既に可決済)を前提に生成しております。四十七条第六項、七項をご参照ください。

    そのほかにこのような機能があれば、また、こういう対応が必要だ、といった事がございましたらお寄せいただけますと幸いです。

  3. kouya より:

    初めまして^^

    僕はものすごい初心者です。
    で、新しくホームページを立ち上げたいと思うのですが、なかなか上手くできません。
    そこで、できれば協力をいただきたいと思っています。
    作りたいホームページはこうです。

    ・Basic認証で、特定の人しか閲覧できない。
    (○○○:○○○
    ↑ID ↑パスワード というファイルの準備はできています。)
    ・ホームページのデザインも出来ています。

    ↑のようなホームページはどうすれば出来るでしょうか?
    僕がいまいち出来ないのは、Basic認証 HTMLを作る事です。
    「○○をここに付けて、○○でOKだよ」
    みたいな説明をいただければ幸いです!

    それではよろしくお願いします!

  4. kenji0302 より:

    kouyaさん

    BASIC認証って言葉が判って、こんなへんぴなブログ記事を見つける事ができる時点で、きっと初心者じゃないですよ(笑)
    小学生でそこまでできる、というのは僕からみるととても凄い事だと思います。

    さてさて、BASIC認証をHTMLでやるこの記事の方法ですが、実はInternetExplorer7以降だとちゃんとうごきません、

    つまり、Windows7やWindowsVISTA、そしてInternetExplorerのバージョンが上がっているWindowsXPでは動かないんです、ごめんなさいね。

    普通にダイアログ表示のBASIC認証を使うのがいいと思います。このあたりを参考にしてみてください。

    http://www.futomi.com/lecture/htaccess/htpasswd.html

    もしどうしてもHTMLでログイン画面をつくりたい!というのであれば、PHPなどでプログラムを作成する必要が有ります。このページが参考になりそうです。

    http://mylearning.jugem.jp/?eid=8

    それでは、頑張ってくださいね。

コメントをどうぞ