LimitディレクティブでGET,POSTを制限する
WordPressなどのCMSを利用してブログを公開していると、
コメントスパムやピンバックスパムの標的になることもあります。
そんな時には特定ホストから以外はPOSTを制限してしまうことが近道です。
ここでは.htaccessを利用してPOSTを制限する手順をご紹介します。
LimitディレクティブでGET,POSTを制限する
コメントの投稿やピンバックなどで利用されるPOSTメソッドによるデータ送信は、
ユーザー登録やCMSなどの投稿を行う際にも利用されます。
よく目にする機会があるのは、お問い合わせフォームかもしれません。
その為、すべてのPOSTを制限してしまうと、
管理者(自分)自身の作業の妨げになりかねません。
その為、Limitディレクティブを利用した制限では、
許可・不許可(拒否)を指定して制限を行うことができるようになっています。
当サイトでも、特定のホスト(IP)から以外のPOSTはすべて制限をしています。
以前は、コメントを有効にしていたのですが、
スパムの餌食になってからまずはてっとり早く処理する方法として、
問合せフォームもありませんでしたし、コメントを閉じるという選択をしました。
一旦、すべて閉じた上で必要に応じて、
または有効な手立てが見つかってからコメントを再開すればいいかなという力感でいます。
さて、まずLimitによる特定のメソッドを制限するにあたって、
公式のマニュアルでは以下のように書かれています。
<Limit> ディレクティブ|core – Apache HTTP サーバ (抜粋引用)
<Limit> ディレクティブ
説明: 囲いの中にあるアクセス制御の適用を特定の HTTP メソッドのみに 制限する 構文: <Limit method [method] … > … </Limit> コンテキスト: サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess 上書き: All ステータス: Core モジュール: core
<LimitExcept>による逆指定を行う方法の方が、
より便利かもしれませんが、取り急ぎは制限したいものを記載する方法を選択しています。
※<Limit>では記載したメソッドの利用を制限します。(その他は許可される)
※<LimitExcept>では記載したメソッドのみ許可されます(その他は制限される)
<LimitExcept>を選択したほうが未知な部分を広範囲に制限ができますので、
より安全であるとは思います。
普段接点のないメソッドが多くあるのが以下でわかります。
<LimitExcept> ディレクティブ|core – Apache HTTP サーバ
メソッド名には以下の中から一つ以上を列挙することができます: GET, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND,PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK. メソッド名は 大文字小文字を区別します。 GET を指定した場合には HEAD リクエストにも制限がかかります。TRACE メソッドに制限をかけることはできません。
記述方法
<Limit>ディレクティブの一番簡単な記述例を軽くご紹介します。
全POST要求拒否
すべてのPOST要求を拒否します。
1 2 3 4 |
<Limit POST> order deny,allow deny from all </Limit> |
CMSなどを利用しておらず、誰一人POST(送信や登録など)を行わないなら、
こうした運用も可能でしょう。
しかし、何らかの条件でPOSTを許可することがほとんどです。
そんな場合には以下のように指定します。
特定のIPアドレスからの要求のみ許可
特定のIPアドレスからの要求を許可する場合には、
全て拒否の設定の後に「allow from (IPアドレス)」で記載します。
1 2 3 4 5 |
<Limit POST> order deny,allow deny from all allow from 106.188.144.28 </Limit> |
これによって、
自分がアクセスする場合には許可するといったようなことができるようになります。
が、
自分が常に固定グローバルIPのみを利用していることはほぼないはずです。
自宅はともかく、スマホなどでは接続に利用されるグローバルIPアドレスが、
都度変更されるのが通常です。
そこで、IPアドレスの指定にはIPネットワーク帯によって指定すると便利です。
例えば、上記設定の「106.188.144.28」はUQ WiMaxを利用して、
私が接続を行った際に表示されたIPアドレスです。
しかしながら、プロバイダが利用しているIPアドレス帯は、
公開されていない場合が多くあります。
※携帯キャリアであればしっかり公開されているのですが。
そのような場合には、以下のように紐解いて、
プロバイダが保有しているグローバルIPアドレスを検索します。
私の場合、UQ WiMaxで接続していますので、
以下のように設定を行うことになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<Limit POST> order deny,allow deny from all allow from 49.132.0.0/14 allow from 106.188.0.0/16 allow from 106.189.0.0/16 allow from 106.190.0.0/16 allow from 106.191.0.0/16 allow from 113.152.64.0/18 allow from 113.157.194.16/29 allow from 113.157.199.0/26 allow from 113.157.202.120/29 allow from 113.157.210.144/28 allow from 114.22.0.0/16 allow from 118.152.229.0/26 allow from 119.107.192.0/18 allow from 124.215.251.152/29 allow from 182.248.143.32/29 allow from 182.248.143.56/29 </Limit> |
さいごに
このように設定をおこなうことで(必ずしもこれが正解というわけではない)、
自分がアクセスした場合のみPOSTができるようにするといった制御ができるようになります。
当サイト内のコンテンツおよび画像を含むすべてにおいて、管理人が著作権を保持しております。
当サイトでご紹介しております写真につきましては著作権の放棄はしませんが、
ライセンスフリーでご利用いただいて構いません。
コンテンツを有益であると感じていただけましたら非常に光栄です。
ありがとうございます。
サイト内コンテンツを引用される際には、出典元として当サイト(個別記事)へのリンクをお願いいたします。
申し訳ございませんが、無断転載、複製をお断りさせて頂いております。
関連記事
-
(apache 2.0.65)ローカル環境(windows)へのApache設置
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPをmod_fcgidやmod_fastcgiでFastCGI実行する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
IPアドレスから.htaccess用のネットマスク変換できるサイトが便利
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
1つのPC(サーバー)で複数のApacheをインストールして利用する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
Apache2.0.xのhttpd.confを手動で作成する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
1つのPC(サーバー)に複数のApacheをエラーを避けて暫定インストール
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
Apache2.0.xの初期設定をVBScriptを利用して1発で完了する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
[コンピュータに MSVCR110.dllがない]とApacheMonitor.exeを起動して言われた場合
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
PHPを1行目の[#!php-cgi]を省いて(書かずに)CGI実行する方法
Google or AdMax Promotion(it) 禁断の機能がau公式 …
-
(mod_fcgid on 2.0.x)windowsでCGIをFastCGIで実行するように設定したかった
Google or AdMax Promotion(it) 禁断の機能がau公式 …