Memo

メモ > サーバ > 構築: 攻撃からの防御 > Basic認証でアクセス制限

■Basic認証でアクセス制限
■Apache ユーザ名「test」、パスワード「1234」で制限をかける例
# vi .htaccess
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/secret/.htpasswd Require valid-user
# vi .htpasswd
test:ZM56IZdqDMwjY
Basic認証設定ツール | refirio.org http://refirio.org/view/368 htpasswdファイル生成(作成) http://www.luft.co.jp/cgi/htpasswd.php .htaccessファイルの利用が許可されていない場合、あらかじめ許可しておく必要がある 以下は /home/test 内で.htaccessの利用を許可する例(「AllowOverride All」を指定すると許可される)
# vi /etc/httpd/conf/httpd.conf
<Directory "/home/test"> AllowOverride All </Directory>
設定したら、Apacheの設定ファイルを再読み込みする
# service httpd reload
■Apache 2.4(特定のディレクトリ配下のみ) ※未検証 ディレクトリが存在する場合、そのディレクトリ直下に .htaccess を作成してBasic認証を設定すればいい 実際にはディレクトリが存在しない場合(URLルーティングを使用している場合など)、以下のように指定することで対応できる この場合、「/basic/secret」内にのみBasic認証をかけている
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/example/html/basic/.htpasswd #Require valid-user SetEnvIf Request_URI '/basic/secret' secret <RequireAny> Require valid-user Require env secret </RequireAny>
特定のURLだけBasic認証を掛けない #Apache - Qiita https://qiita.com/SHIN_DEVELOP/items/1cb7845fbfcd4bba3d69 ■Apache 2.4(特定のディレクトリは除外) ※「.htaccess でアクセス制限」も参考に
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/secret/.htpasswd Require valid-user SetEnvIf Request_URI "/upload/image/" isImage <RequireAny> Require env isImage Require valid-user </RequireAny>
■Apache 2.4(特定のユーザーエージェントは除外) ※「.htaccess でアクセス制限」も参考に
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/secret/.htpasswd Require valid-user SetEnvIf User-Agent "Edg/89.0" isEdge SetEnvIf User-Agent "Selenium" isSelenium <RequireAny> Require env isEdge Require env isSelenium Require valid-user </RequireAny>
Apache 2.4 アクセス制御 - eastforest https://www.eastforest.jp/vps/4943 ■Apache 2.4(特定のIPアドレスは除外) ※「.htaccess でアクセス制限」も参考に
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/secret/.htpasswd Require valid-user <RequireAny> Require ip 127.0.0.1 Require ip 203.0.113.1 Require valid-user </RequireAny>
Apache 2.4 アクセス制御 - eastforest https://www.eastforest.jp/vps/4943 MYN - 2016/05/30 14:21 / Apache 2.4.10 Satisfy Any http://myn.meganecco.org/1464585660.html 【.htaccess】特定のIPを除外してベーシック認証をかける方法 | web関連 | 勉強ブログ「二色人日記。」 https://twotone.me/web/3312/ ■Apache 2.2(特定のディレクトリ配下のみ) ディレクトリが存在する場合、そのディレクトリ直下に .htaccess を作成してBasic認証を設定すればいい 実際にはディレクトリが存在しない場合(URLルーティングを使用している場合など)、以下のように指定することで対応できる この場合、「/basic/secret」内にのみBasic認証をかけている
AuthType Basic AuthName "Input ID and Password." AuthUserFile /var/www/html/example/html/basic/.htpasswd Require valid-user SetEnvIf Request_URI '^/basic/secret' secret Satisfy any Order Deny,Allow Deny from all Allow from env=!secret
【Wordpress】特定URLにマッチするときにベーシック認証をするよ! - やったこと https://absg.hatenablog.com/entry/2020/02/18/211922 ■Apache 2.2(特定のディレクトリは除外) ※「.htaccess でアクセス制限」も参考に Basic認証配下のディレクトリに、以下を記述した.htaccessを置くと、そのディレクトリをBasic認証対象外にできる
Satisfy any order allow,deny allow from all
.htaccessで特定のファイルやディレクトリのみBASIC認証を解除する | ザ サイベース https://thesaibase.com/server/htaccess-basic-auth ■Apache 2.2(特定のユーザーエージェントは除外) ※「.htaccess でアクセス制限」も参考に 以下のようにすれば、特定のユーザーエージェントからのみBasic認証なしでアクセスできる 以下は「Edg/89.0」もしくは「Selenium」を含むものを許可する例
Satisfy Any BrowserMatchNoCase Edg/89.0 isEdge=1 BrowserMatchNoCase Selenium isSelenium=1 Order Deny,Allow Deny from all Allow from env=isEdge Allow from env=isSelenium AuthUserFile /var/www/html/secret/.htpasswd AuthGroupFile /dev/null AuthName "Input ID and Password." AuthType Basic require valid-user <Files ~ "^.(htpasswd|htaccess)$"> deny from all </Files>
Apache で特定の User-Agent だけ BASIC 認証をバイパスする方法 - アクトインディ開発者ブログ https://tech.actindi.net/2010/05/14/3482790616 ■Apache 2.2(特定のIPアドレスは除外) ※「.htaccess でアクセス制限」も参考に 以下のようにすれば、特定のIPアドレスからのみBasic認証なしでアクセスできる 以下は「127.0.0.1」と「203.0.113.1」を許可する例
Satisfy Any Order Deny,Allow Deny from all Allow from 127.0.0.1 Allow from 203.0.113.1 AuthUserFile /var/www/html/secret/.htpasswd AuthGroupFile /dev/null AuthName "Input ID and Password." AuthType Basic require valid-user <Files ~ "^.(htpasswd|htaccess)$"> deny from all </Files>
■nginx .htaccessで設定することはできないので、nginxの設定ファイルを編集して再起動する 例えば nginx.conf で以下のように設定すると、「/secret/」がBasic認証の対象になる .htpasswd の内容はApacheと同じ要領で作成できる
server { listen 80 default_server; server_name _; index index.html; root /var/www/html; sendfile off; location / { } location ^~ /secret/ { auth_basic "Auth"; auth_basic_user_file /var/www/html/secret/.htpasswd; } }
以下で設定ファイルの文法チェックができる
# nginx -t -c /etc/nginx/nginx.conf
設定できたら以下のコマンドで設定ファイルを再読込する
# service nginx reload
再読込で大丈夫だが、もし反映されなければ再起動も試す
# service nginx restart
それでも駄目なら、いったん停止してから起動する
# service nginx stop # service nginx start
Nginx で Basic 認証 - Qiita https://qiita.com/kotarella1110/items/be76b17cdbe61ff7b5ca htpasswdファイル生成(作成) http://www.luft.co.jp/cgi/htpasswd.php nginxで設定ファイルチェック - Qiita https://qiita.com/yaotti/items/bd6774888a790c00e6fd Nginxでベーシック認証を行う際の注意点 http://wpnote.link/notes-when-performing-basic-authentication-with-nginx/ 上の手順でPHPページに対してBasic認証を設定すると、対象ページではPHPが実行されなくなる 冗長だが、以下のようにここにもPHPの設定を書く必要があるみたい
location ^~ /secret/ { auth_basic "Auth"; auth_basic_user_file /var/www/vhosts/test/public/tool/.htpasswd; location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/vhosts/test/public$fastcgi_script_name; include fastcgi_params; } }
nginxだとphp scriptファイルにbasci認証がかからないんで すけどー - オレンジの国 http://technical.live-on.net/archives/1414 ただしLaravelなどURLルーティング機能のあるフレームワークを使っている場合、 /index.php がリクエストを受け取って処理を始めるため、上記の方法で個別にBasic認証を制御できないみたい それでも設定すると、フレームワークから /secret/ のURLを呼び出したときに404エラーとなってしまう 対処方法があるかは要調査 以下は可能性がありそう?未検証 NginxでBasic認証(Laravel) | Qrunch(クランチ) https://qrunch.net/@G8AaKC38xzUeSbBe/entries/u9XM60aUWnMgTkts ■nginx(特定のディレクトリは除外) 以下のようにすれば、「.well-known」ディレクトリ内には認証なしでアクセスできる
location / { try_files $uri /index.php?$query_string; auth_basic "Auth"; auth_basic_user_file /var/www/main/.htpasswd; location /.well-known/ { satisfy any; allow all; } }
[Nginx] 特定 URL を Basic 認証から除外する方法 | CodeNote https://codenote.net/nginx/4204.html ■nginx(特定のユーザーエージェントは除外) 以下のようにすれば、特定のユーザーエージェントからのみBasic認証なしでアクセスできる 以下は「Chrome-Lighthouse」もしくは「Selenium」を含むものを許可する例 (なお「Chrome-Lighthouse」を許可すると、Basic認証をかけたサイトでもPageSpeed Insightsでの計測ができる)
location / { auth_basic "Auth"; ↓ set $auth "Auth"; if ($http_user_agent ~ (Chrome-Lighthouse|Selenium)) { set $auth off; } location / { auth_basic $auth;
Nginxでbotからのアクセス時にBasic認証を外す #nginx - Qiita https://qiita.com/maruware/items/63574425900010a1b37a ■nginx(特定のIPアドレスは除外) 以下のようにすれば、特定のIPアドレスからのみBasic認証なしでアクセスできる 以下は「203.0.113.1」と「203.0.113.2」を許可する例
location / { satisfy any; allow 203.0.113.1; allow 203.0.113.2; deny all; auth_basic "Auth"; auth_basic_user_file /var/www/vhosts/test/.htpasswd; }
nginx 一部のアドレスにbasic認証を掛けない。 - podhmoの日記 http://d.hatena.ne.jp/podhmo/20110311/1299817584 nginxで特定のIPからは公開したいけどそれ以外はBASIC認証にしたいときの設定 - Qiita https://qiita.com/katamuki/items/9a0a5f288d041b421f4c ■AWS ALB+Lambda AWS.txt の「ロードバランサー」の「Basic認証」を参照 ■「AuthName」の値 上記で記載している「AuthName "Input ID and Password."」のような内容は正確では無さそう Apache | Basic認証を使ったアクセス制限を行う https://www.javadrive.jp/apache/allow/index3.html AuthNameの説明は 「認証領域」 「一度認証が通ったあと同じ認証領域の名前が設定されている Basic 認証が必要なページへアクセスしたときに認証が不要となります。」 とある よってここは「Developer」「Admin」「Sales」のような区分を設定すべきだと思われる ここの文字列が認証ダイアログに表示されるブラウザもあるが、少なくともChromeでは表示されない (「認証領域をユーザに告知する」という意味では、表示される方が自然な気はするが) よって何かしらの案内を書く場所でも無いのかもしれない ■.htpasswdの解析 htpasswdファイルに書かれたパスワードは非可逆な暗号化(ハッシュ化)されているため、復号化できない ただし入力したパスワードはBase64してヘッダ内に付与してやりとりされるため、ここからならパスワードを抜き出すことはできる つまりBasic認証の情報は暗号化されずに平文でやりとりされるため、SSL無しでBasic認証を使用するのは好ましくない 以下は具体例 とあるページで認証してからヘッダ情報を確認すると以下が記載されていた Authorization: Basic ZGVtbzplbnRyeQ== この「ZGVtbzplbnRyeQ==」をBase64デコードすると「demo:entry」となる これがBasic認証の認証情報 とあるページで認証してからヘッダ情報を確認すると以下が記載されていた authorization: Basic c3RhZ2luZzpxYXp3c3hlZGM= この「c3RhZ2luZzpxYXp3c3hlZGM=」をBase64デコードすると「staging:qazwsxedc」となる これがBasic認証の認証情報 .htpasswdファイルの解析(デコード)は無理。 | クズリーマンのカス備忘録 https://it-afi.com/apache/post-1054/

Advertisement