発生している問題
htpasswdコマンドで生成した既存のファイルを使用してPHP側で認証を実装したいと考えてます。
平文パスワードは把握しているのですが、.htpasswdと突合する際に生成時のソルト値を解らないと
単方向でも確認する事は不可能でしょうか?
できればhtpasswdで生成されたパスワードファイルを使用したく、宜しくお願いします。
PHP
1<?php 2 3function put401() { 4 header('WWW-Authenticate: Basic realm="Enter username and password."', true, 401); 5 header('Content-Type: text/plain; charset=utf-8'); 6 die('このページを見るにはログインが必要です'); 7} 8 9function BasicAuth() { 10 if(!isset($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW'])) put401(); 11 if(strlen($_SERVER['PHP_AUTH_USER'])<=0 || strlen($_SERVER['PHP_AUTH_PW'])<=0) put401(); 12 13 $fp = @fopen("/PATH/.htpasswd", "r"); 14 if (!$fp) { 15 header('HTTP', true, 500); 16 die(); 17 } 18 19 $_hash = md5($_SERVER['PHP_AUTH_PW']); // << ここでハッシュ値を求める際のアルゴリズムが不明(仮置きでMD5使用) 20 $str_auth = sprintf("%s:%s", $_SERVER['PHP_AUTH_USER'], $_hash); 21 22 $flg_auth = false; 23 while (($buffer = fgets($fp, 4096)) !== false) { 24 $flg_auth = (trim($buffer) === $str_auth); 25 if($flg_auth) break; 26 } 27 fclose($fp); 28 if(!$flg_auth) put401(); 29 return; 30} 31 32BasicAuth();
回答1件
あなたの回答
tips
プレビュー