「.htaccess」に関する日記

キャラ倉庫とtgws_rpg

キャラ倉庫

転送量増えた件、Metaの迷惑ロボットが別のロボットに切り替えて同じ迷惑行為を始めただけでした。
通常のウェブブラウザのユーザーエージェントを偽装するという徹底した悪質さだったから、もうMetaのロボットは全面排除でいいね。
MetaのAIだかFacebookからの流入だとかの話はあるけど、それももういらん。

というわけで、.htaccessで拒否。

# Metaは拒否
SetEnvIfNoCase User-Agent "developers.facebook.com" meta_spam=on
SetEnvIfNoCase User-Agent "facebookexternalhit" meta_spam=on
SetEnvIfNoCase User-Agent "meta-webindexer" meta_spam=on
SetEnvIfNoCase User-Agent "meta-externalads" meta_spam=on
SetEnvIfNoCase User-Agent "meta-externalagent" meta_spam=on
SetEnvIfNoCase User-Agent "meta-externalfetcher" meta_spam=on
RewriteCond %{ENV:meta_spam} on
RewriteRule  ^(.*)$ - [G,L]

まだ「developers.facebook.com」がユーザーエージェントに一応残っているので、それを判断材料にしてるけど、それすらなくなったらIPで弾くしかないかな。
403 Forbiddenで「見ちゃダメ」って表明しても1分後にまた同じ場所見に来るという意味不明挙動なので、410 Goneで「二度と見せない」のエラーコードを返しています。

ここんとこずっとMetaの迷惑ロボット対策ばっかりだったので、ここらで一応コンテンツの更新も。
メインページは、移行作業中の表記を外し、サイトタイトルを記載しました。
フナヨイは画像追加。

tgws_rpg(開発中止)

「テヅカイ」の一環として作ろうとしていたtgws_rpgでしたが、これのコンセプトはTGWS世界観測所でやるほうに舵を切ったので、tgws_rpgプロジェクトはいったん終了。
Visual StudioでTypeScript使って何かやるつもりだったみたいだけど、コード見ても何も思い出せませんでした。

キャラ倉庫

お行儀の悪いbotへの対策をしてました。

robots.txtを見てくれる程度に理性が残っているならrobots.txtで。
特別ページを深掘りされても迷惑なだけなんで、そういう指定に。
ちなみに、robots.txtの設定が競合する場合、長いほうが勝つらしいです。

User-agent: *
Allow: /
Disallow: /w/
Allow: /w/images/
Disallow: /%E7%89%B9%E5%88%A5:
Disallow: /%e7%89%b9%e5%88%a5:
Disallow: /特別:
Disallow: /Special:

そもそもほとんどの特別ページはロボットに限らずただの閲覧者に見せる必要はないので、MediaWikiのLocalSettings.phpの中でアクセス制御。

// 一般ユーザーには見せないページ
$wgHooks['SpecialPageBeforeExecute'][] = function ( $special, $subPage ) {
	if ( $special->getUser()->isAnon() ) {
		switch ($special->getName()) {
			case 'Allpages':                 // ページ一覧
			// ... 見せていい特別ページだけ許可リスト方式で列挙
			case 'Whatlinkshere':            // リンク元
				break;
			
			default:
				throw new ErrorPageError( 'badaccess', 'badaccess-group0' );
		}
	}
	return true;
};

迷惑が過ぎる奴は、.htaccessで問答無用で弾く。

SetEnvIfNoCase User-Agent "meta-externalagent" bad_ua=on
RewriteCond %{ENV:bad_ua} on
RewriteRule ^(.*)$ - [F,L]

AI クローラに HTTP 402 を返して課金する。AWS WAF 新機能の仕組み - サーバーワークスエンジニアブログ
この記事に書いてあるような、AIクローラーに課金するシステムが使い物になるようになったら、3日間で同じコンテンツに4万アクセスでもしてくれていいんですがね。

セキュリティヘッダ

セキュリティ診断かけてみたら、X-Content-Type-OptionsX-Frame-Optionsに不備があるって言われたんで、わかる範囲でつけておきました。
ここtgws.plusドメインは過去に対応済みだったので、それ以外の、dq10player.eventsとか、andraw.uvs.jpとか、そのあたりですね。
ほかに、「Permissions-Policy "interest-cohort=()"」も付けたんですが、今もこれが必要かどうかはよくわかっていません。

Docker Desktop

.htaccessの調整を進めたのと、PHPの画像関連の拡張の有効化。
ただ、まだローカル開発環境で画像は表示できてないです。
何が足りないんだ?

Docker Desktop

リダイレクトループの件は、リバースプロキシ兼TLSに使っているNginxとPHPの実行環境になるApacheの間の通信が暗号化なしのHTTP通信だったため、クライアントとの間がすでにHTTPSなのに気付けず強制HTTPSのリダイレクトを繰り返していたということでした。
強制HTTPSに条件を追加することでとりあえずは回避しました。
あとは、画像がうまく表示されないのをどうにかしないと。

Docker Desktop

一つのDockerfileを使いまわしてドメインごとの環境変数を渡すことでマルチドメイン対応。
これでローカル開発環境完成…と思ったら、リダイレクト周りを中心にエラーが出ているので、そのあたりの調整がまだ必要そうです。

古いものはあまり食べないのですが…

何やら一年ほど前の餅が出てきました。
真空パックにされているし、餅なので大丈夫なはず…
一応賞味期限は8月までだし…
というわけで網で焼いて美味しく食べさせていただきました。
明日が楽しみだ…

.htaccessファイルを使うとサーバーエラーのときに出てくるメッセージ(NotFoundやForbiddenなど)を変えられるということで、挑戦してみたのですが、サーバーのディレクトリ構成がわからなかったため、断念しました(というより、失敗しました)。

「自分に100質」にひとつ追加しました。
掲示板にレスするときの精神です。
一行スレには一行レスというのも悪くはないんですが。

あと、CGIの配布がOKであったようなので、「Q&A」の記述を変更しました。
まあ欲しがる人なんていないと思いますが。

ダウンロードCGI

SuExec・.htaccess・CGIを使って、データのダウンロードは出来るが外部からの直リンクは出来ないというシステムを作ろうとしたのですが、なかなかうまくいきません。
今回はMIDIで試してみたのですが、WindowsMediaPlayerで不明なエラーが出て再生されないのです。
よく考えたら.htaccessを使っている時点で、"deny from all"、"allow from tgws.fromc.jp"でよさそうなものですが・・・・
元々.htaccessを使わずにしようと思っていたのに本末転倒かも・・・・
一応、「その他」→「MIDI」で見に行けます。

「ByteEdit」のHTMLヘルプが完成しました。
このようなHTMLヘルプを利用する最大のメリットは、コンパイルする前のHTMLファイルがそっくりそのままオンラインヘルプとして使えることです。
あとはプログラム本体をHTMLヘルプに対応させるだけです。