特定のページにBasic認証を設定しているサイトで、意図していないリソースにまで認証が適用されてしまうトラブルは少なくありません。
前回は単一ページでの調査方法を紹介しましたが、今回は複数ページにわたって一括で確認できる方法を紹介します。
複数ページのリソースに対するBasic認証の有無を調べる方法
対象とするページの例(ダミー)
- https://example-site.com/en/page-a
- https://example-site.com/en/page-b
- https://example-site.com/en/page-c
シェルスクリプト:check_auth_multi.sh
次のスクリプトでは、複数のページURLを pages.txt
に記載しておくだけで、それぞれのページから読み込まれるすべてのリソースを調べ、Basic認証が必要なリソースだけを一覧表示します。
スクリプトの内容
#!/bin/bash
# 対象のドメイン(相対URL補完用)
DOMAIN="https://example-site.com"
# 初期化
> all_urls.txt
> full_urls.txt
> auth_required.txt
> status_report.txt
# 各ページを処理
while read page_url; do
echo "▼ 調査中: $page_url"
# 該当ページのHTMLからリソースURLを抽出
curl -s "$page_url" \
| grep -Eo 'src="[^"]+"|href="[^"]+"' \
| sed 's/src=//;s/href=//;s/"//g' >> all_urls.txt
done < pages.txt
# 重複排除
sort -u all_urls.txt > all_urls_unique.txt
# 相対パスを絶対URLに変換
awk '!/^https?:\/\// {print "'"$DOMAIN"'" $0} /^https?:\/\// {print $0}' all_urls_unique.txt > full_urls.txt
# 認証チェック
echo "▼ Basic認証が必要なリソース"
while read url; do
code=$(curl -o /dev/null -s -w "%{http_code}" -I "$url")
echo "$code $url" >> status_report.txt
if [ "$code" = "401" ]; then
echo "認証対象: $url"
echo "$url" >> auth_required.txt
fi
done < full_urls.txt
echo ""
echo "▼ チェック完了"
echo " - Basic認証リスト: auth_required.txt"
echo " - 全レスポンス一覧: status_report.txt"
事前に用意するファイル:pages.txt
以下のように、調査したい複数のページURLを1行ずつ記載してください。
https://example-site.com/en/page-a
![]()
https://example-site.com/en/page-b
![]()
https://example-site.com/en/page-c
実行手順
chmod +x check_auth_multi.sh
./check_auth_multi.sh
出力されるファイル
ファイル名 | 内容 |
---|---|
all_urls.txt | 各ページから抽出された元のURL一覧(重複あり) |
all_urls_unique.txt | 重複除外済みのURL一覧 |
full_urls.txt | 絶対URL形式のリソース一覧 |
auth_required.txt | Basic認証がかかっていたリソースのみ |
status_report.txt | すべてのURLとHTTPステータスの一覧 |
補足:HTTPS証明書の警告を無視したい場合
開発環境などで自己署名証明書を使用している場合は、curl
の -k
オプションを追加してください:
code=$(curl -k -o /dev/null -s -w "%{http_code}" -I "$url")
まとめ
- サイトに複数ページある場合でも、スクリプトで一括チェックが可能です。
- リソース単位でBasic認証が必要かどうかを把握できるため、予期しない認証ダイアログの発生源を特定できます。
- スクリプトは柔軟にカスタマイズ可能で、WordPress、静的HTMLサイト問わず使用できます。
コメント