福冨諭の福冨論

RSSリーダーではこちらをどうぞ→https://feeds.feedburner.com/fuktommy

声のかけら。にDigest認証をかけてみたよ

bbs.fuktommy.com声のかけら。 で作られています。 今回解決しようとした問題は次の2つです。

  • スパム投稿を制限したい。
  • 検索エンジンが検索履歴を削除するのを制限したい。

どちらも完全に防ぐことは難しいですが、 ある程度防げればいいかなあ、という程度です。 必要な箇所だけにDigest認証をかけることにしました。

スパム投稿の制限は、POSTに限ってダイジェスト認証をかけるという作戦で、 これは検索すると定番の設定が出てきます。

<Location "/">
     <Limit POST>
         Require valid-user
     </Limit>
 </Location>

検索履歴を削除するのの制限というのはどういうことかというと、 hogeという単語で検索すると、それが履歴に残り、 ?mycmd=delsearch&myword=hoge にアクセスすると 履歴から消えるという仕組みになっています。 これってPOSTでやるべきじゃね、という説もありますが、 直すのめんどくさいので今回はGETのままでやりました。 投稿もPOSTだけに制限されてるのか謎。

RewriteEngine On
 RewriteCond %{QUERY_STRING} mycmd=delsearch
     RewriteCond %{LA-U:REMOTE_USER} ^$
     RewriteRule ^$ /login/ [R]
 <Location "/login/">
     Require valid-user
 </Location>

/login/ って何かというと、 docrootで ln -s . login として作ったシンボリックリンクです。 Apacheの設定だけでやろうとしたけど、うまく行かなかった。 んで、削除URLにアクセスしようとすると、 /login/ に飛ばされて、Digest認証を要求されるという仕組み。 %{LA-U:REMOTE_USER} のところは思ったように機能してないんだけど、 これを外すと /login/ に2回アクセスしてる。謎。

パスワードファイルはこんな感じにして作る。

% htdigest -c bbs.fuktommy.com bbs.fuktommy.com guest

全体をまとめた設定ファイルはこんな感じ。

<VirtualHost *>
     ServerAdmin webmaster@fuktommy.com
     DocumentRoot /srv/www/bbs.fuktommy.com
     ServerName bbs.fuktommy.com
     ErrorLog /var/log/httpd/bbs.fuktommy.com.error.log
     CustomLog /var/log/httpd/bbs.fuktommy.com.access.log combined
 
     <Directory "/srv/www/bbs.fuktommy.com">
         Options +Indexes +ExecCGI
         AllowOverride None
 
         RewriteEngine On
         RewriteCond %{QUERY_STRING} mycmd=delsearch
             RewriteCond %{LA-U:REMOTE_USER} ^$
             RewriteRule ^$ /login/ [R]
     </Directory>
 
     <Location "/">
         AuthType Digest
         AuthName "bbs.fuktommy.com"
         AuthUserFile /srv/passwd/bbs.fuktommy.com
         <Limit POST>
             Require valid-user
         </Limit>
     </Location>
 
     <Location "/login/">
         Require valid-user
     </Location>
 </VirtualHost>

Original Article: http://blog.fuktommy.com/1240074944