web-dev-qa-db-ja.com

.htaccessを使用して、403ではなく302を返すことが禁止されています

私の顧客サイトの一部は共有ホスティングを使用しており、一般的に彼らは_での総当たり攻撃の試みを禁止していないので、私のWordPressインストールのいくつかにさらに別のセキュリティ層を追加する過程にありますWordPressログインページ。通常、私はfail2banを使用しますが、悲しいことに、これらのアカウントは共有ホスティング上にあり、それを利用する立場にはありません。

総当たり攻撃を防ぐためにWordPressプラグインが存在することは知っていますが、.htaccessファイルを介したすべての試行をほとんどブロックする単純なwp-login.phpメソッドが必要です。

そこで、私以外のユーザー、または少なくともISPを使用していないユーザーをブロックするこの単純なコードを思い付きました。

<FilesMatch "wp-login.php">
    deny from all
    allow from .isp.example.com
</FilesMatch>

コードは正常に機能しますが、403が禁止されているが、Firebugが302が一時的に移動したことを確認すると予想します。ヘッダーステータスリターンは次のようになります。

HTTP/1.1 302 Moved Temporarily    
Date: Thu, 31 Dec 2015 00:24:15 GMT    
Server: Apache    
X-Powered-By: PHP/5.3.29    
Expires: Wed, 11 Jan 1984 05:00:00 GMT    
Cache-Control: no-cache, must-revalidate, max-age=0    
Pragma: no-cache    
Link: <http://www.example.com/wp-json/>; rel="https://api.w.org/"    
Location: http://www.example.com/wp-login.php    
Vary: Accept-Encoding    
Content-Type: text/html; charset=UTF-8    
Transfer-Encoding: chunked

これはブルート攻撃を阻止するように見えますが、サーバー上で不必要な複数のアクセスを試行します。たとえば、FireBugは次のようになります。

123

拒否するのではなくリダイレ​​クトを使用する以外に、これについて私にできることはありますか?

  • 拒否(リダイレクトではない)で403を返すにはどうすればよいですか
  • これは正常ですか?またはウェブホストに連絡する必要がありますか?
2
Simon Hayter

書き換えモジュールがインストールされている場合は、これを試してください。

RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)wp-login.php$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ - [R=403,L]

xxxをIPアドレスの各オクテットに置き換えます。たとえば、IPアドレスが111.222.333.444の場合、次を置き換えます

RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$

RewriteCond %{REMOTE_ADDR} !^111\.222\.333\.444$

それがうまくいかない場合は、これを使用してください:

RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)wp-login.php$ - [R=403,L]

これらのスクリプトの良い点は、wp-login.phpで終わるすべての種類のURLにもルールが適用されることです。これは、Webサイトの99%が一般に公開することを強く疑います。

ホスト名は最終的にIPアドレスに解決する必要があるため、ホスト名の代わりにIPアドレスを使用することもお勧めします。また、.htaccessを更新することでApacheが変更を認識する時間がないため、ログインするたびにISP、あなたはあなたのIPアドレスを書き留めて、あなたのコンピューターだけがwp-login.phpスクリプトにアクセスできるように、上で示したスクリプトでそれを使います。

1
Mike

同じ問題が発生している可能性のある他の人のために、これに何かを追加するだけです。私が使用しているかどうかにかかわらず、5つの連続した302エラーの同じシリーズを受信して​​いました。

<Files wp-login.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>

または、私の.htaccessファイルで上記の書き換えルールを使用します。

これは「403.shtml」ページの作成に失敗したためです cpanelを使用してページを作成し、拒否されたIPアドレスがファイルにアクセスしようとすると「403」エラーが表示されるようになりました... 馬鹿のように、Apacheがデフォルトの403ページを生成すると想定していたこれはWordpress以外のサイトで正しく動作しますが、wordpressはエラーを処理しようとするようですページ自体-403.shtmlを作成すると、wordpressが.htaccessにジョブを実行させます...

1
swagIT

これは正常ですか?またはウェブホストに連絡する必要がありますか?

いいえ、これは正常ではありません。

X-Powered-By: PHP/5.3.29
:
Link: <http://www.example.com/wp-json/>; rel="https://api.w.org/"  

ただし、示されているHTTP応答ヘッダーは、Apacheだけでなく、PHP(WordPress?)を通過しています-そのままのdeny from ...ディレクティブで予想されるとおりです。 Link:ヘッダーはWPが何らかの原因であると示唆しています。

何らかの競合がありますか?または、カスタム(つまり、PHP)403 ErrorDocumentを定義して、予想される応答をオーバーライドできますか?または、リクエストはWPを介してルーティングされています/どのURLがリクエストされていますか?

0
MrWhite