wordpress関連RSS

たしかに、一旦はwp-admin/index.phpにアクセスされますね。
今回、sucuriのアラートメッセージはfailed login ログインユーザー名
なので、ファイルへの不正アクセスというよりは、不正ログイン検知なので、ログインに失敗しているというのは間違い無さそうです。
xmlrpc.php を無効化できていなかったので、無効化し様子を見ております。
今のところ、不正ログインは起きていませんので、また何かありましたら、
ご質問させていただくかもしれません。
大変詳しくありがとうございます。
(2025-4-4)「ログインしていない状態でwp-adminのフォルダやファイルにアクセスすると、wp-login.phpにリダイレクトされるものだと認識しております。」とお書きですが、この認識が間違っています。
Apacheのリダイレクトの場合、例えば、.htaccessなどに
Redirect 301 /a.php /b.php
と書くか、または、
RewriteEngine On
RewriteRule ^a.php$ b.php [R=301,L]
と書くことで実現できます。
この時Apacheは、ブラウザからa.phpが要求されたら、a.phpを開くことなく即座にb.phpを開きます。ですから、b.phpが閲覧制限されていたら、a.phpもまた閲覧制限が適用されます。
ところがwp-admin/index.phpは、そういう正規の意味でのリダイレクトが行われているわけではありません。WordPress の PHP コード(アプリケーションレベル)で実行されている擬似的なリダイレクトです。その動作は次のようになっています。
処理の流れ(ログインしていない場合に wp-admin/index.php
にアクセスすると…)
https://example.com/wp-admin/index.php
にアクセスwp-admin/index.php
→ wp-admin/admin.php
が読み込まれ、admin.php
内で WordPress コア関数 auth_redirect()
が呼ばれるwp_redirect( wp_login_url() ); exit;
というコードにより、PHP側で wp-login.php
へリダイレクトwp-login.php?redirect_to=...
に飛ばされるという流れです。
つまり、一旦index.phpは開かれるわけです。ということは、wp-login.phpにいくらIPアドレス制限をかけても、制限をかけてないindex.phpはアクセスし放題なわけです。もちろん、index.phpで処理された結果転送されたwp-login.phpは開かれないですよ。でも、index.phpは開かれた後なので、ログには制限されているはずのIPアドレスが残るのです。
(2025-4-3)FilesMatchの仕様云々の前に、ログインしていない状態でwp-adminのフォルダやファイルにアクセスすると、wp-login.phpにリダイレクトされるものだと認識しております。
なので、wp-admin/index.phpにアクセスし放題というのは少し私の認識とは違いました。
(2025-4-3)すみません。もしかしてサーバがApacheと違って動作が異なるのであればすみません。
「FilesMatch なので、wp-adminというディレクトリやその文字列が含まれるファイルへのアクセスを意味するものだと思います。」とお書きなので、すみませんが、そのエビデンスを教えていただけませんか?
Apacheのドキュメンテーションでは、FilesMatchについて、「<FilesMatch>
ディレクティブは、 <Files>
ディレクティブ同様にその中にあるディレクティブの適用範囲をファイル名で制限します。」とあり、Filesディレクティブでは、「このセクション中のディレクティブは、ベース名 (ファイル名の最後の部分) が指定されたファイル名にマッチするすべてのオブジェクトに適用されます。」と、わざわざベース名と指定してパス名は排除しています。
これを素直に読むと、「FilesMatch
は ファイル名だけ に適用。ディレクトリにはマッチしない。」となります。ディレクトリを指定したい場合は、<Directory>
や<DirectoryMatch>
ディレクティブを使用します。ただしこれは.htaccessでは使えないので、そのディレクトリに.htaccessを配置するということになりますが…。
また、逆に説明すると、プラグインやテーマには、「admin-ajax.php」にアクセスするものがあり、アクセスできないと不具合が出ます。これがIPアドレスで制限がかけられていると、allow指定されていないIPアドレスから見ると、サイトに何らかの不具合が出るはずです。それがないということは、現状、wp-adminディレクトリにあるadmin-ajax.phpへは制限がかかっていないということになります。ということは、FilesMatchで指定しているwp-adminは機能していないということではないでしょうか。
(2025-4-3)アドバイスありがとうございます。
XMLRPCは無効化を忘れていたので施しました。これで様子みてみます。
IPアドレスはすみません、ここに載せるための適当なアドレスです。
(2025-4-3)こんにちは。
wp-login.phpやwp-admin以外のエンドポイント(REST APIやXMLRP)を利用して攻撃を試みているかどうかは、チェック済みでしょうか?
Sucuriは実際のログイン試行だけでなく、REST APIやXMLRPCなどの別のエンドポイントへの攻撃も検出している可能性がありますので、ログを確認してみてください。
XMLRPCは、無効化しておくことをお勧めします。
あと、気になる点としては
allow from 1.1.1.1
allow from 1.1.1.2
は、Cloudflareの公開DNSサービスのIPアドレスですよね?
これを許可IPとして使用するのは、実質的に「全世界からのアクセスを許可」しているのに近い状況で、セキュリティ上のリスクが生じる可能性があると思うのですがどうでしょうか?
Sucuriをりようされているのなら、IP制限だけでなく、二要素認証(2FA)の導入も検討してみてください。
(2025-4-3)質問ですが、wp-admin/index.php などもログインしていないとwp-login.phpにリダイレクトがかかりますので、wp-admin/index.phpへのアクセスし放題ということは無いと思うのですが、いかがでしょう?
(2025-4-2)ご回答ありがとうございます。
wp-admin/index.phpもIPアドレスが違うとキッチリと拒否されていますので、
それは違うような気がします。
FilesMatch なので、wp-adminというディレクトリやその文字れるが含まれるファイルへのアクセスを意味するものだと思います。
(2025-4-2)FilesMatchディレクティブの動作はまず、ファイル名に対して指定したものと合うかどうかを比較し、ヒットした場合には、ディレクティブ内のルールを適用します。よく似たのに、Filesディレクテイブがあり、これもファイル名に対して比較がはたらきます。これはどちらも、ファイル名に対して比較がはたらきます。ですからファイルではないwp-admin(ディレクトリ名)にはマッチしません。つまり、ご指定のディレクティブだと、wp-admin/index.php
などにはアクセスし放題です。
また、そもそもサーバの設定で.htaccessでFilesMatchディレクトリが許されているのかどうか確認する必要があります。Apacheの場合なら、AllowOverride Allでないと、.htaccessのFilesMatchディレクティブは無視されます。
AllowOverride Allという前提で、wp-admin以下のファイルにアクセスできないようにするには、wp-adminディレクトリ内にディレクティブ指定しないで単純に
Order deny,allow
Deny from all
Allow from 1.1.1.1
Allow from 1.1.1.2
とした上で、フロントエンドで動くプラグインやテーマのJavaScriptがアクセスする可能性の高いadmin-ajax.php
のみ制限を解除するように次の指定を続けます。
<Files admin-ajax.php>
Order allow,deny
Allow from all
Satisfy any
</Files>
以上で、指定したIPアドレスのみがアクセスできるようになるでしょう。
なお、これでも改善しない場合、Sucuri がリモートのIPではなくてCDN経由のIPを拾っている可能性があります。Suc uriの動作は詳しくないので、他の人の答えに期待しましょう。
(2025-4-2)ご返信ありがとうございます。
IPアドレスはもちろん、変わるのですがそれだとイタチごっこになります。
不思議なのは、wp-login.php以外でログインアタックする方法があるのでしょうか?
上記設定だと、指定したIPアドレス以外はwp-login.phpもwp-adminにもアクセスできないはずですが。
(2025-4-2)ドキュメントのリンクありがとうございます!
template_part_header
コンテキストは例外的にabove the fold扱いになる事が分かり、疑問解決に至りました。
また以下のコードでget_header()がthe_content()の出力に影響する理由がコンテキストの分離が正しく行えておらず、get_header()の呼び出しによりその後のthe_content()に意図しない副作用(above the fold扱い)をもたらしているものだと理解しました。
<?php
get_header(); // NOTE: ここの有無でloading属性が付与されたり・されなかったりする
the_content();
?>
テンプレートパーツで読み込む以下の記述にすることでコンテキストの分離が正しく行え、template-parts/content.phpでは期待通りのloading="lazy"
属性が付与される事が分かりました。
<?php
get_template_part('template-parts/header');
get_template_part('template-parts/content');
?>
(2025-3-22)
WordPressのテーマにて、get_header()
の有無でthe_content()
より出力されるimgタグにloading="lazy"
が付与されたり・されなかったりする挙動が見られるようですが、これは仕様でしょうか?
Ver 6.3.5まではget_header()
の有無で挙動は変わらないようですが、Ver 6.4系以降get_header()
があるとloading属性は付与されないようでした。
以下は挙動の確認をまとめた表です。
確認に用いたコードは以下リポジトリよりご参照頂けます。
https://github.com/TsubasaHiga/wp-lazy-test-theme
以下は確認環境です。
Ver 6.3.5get_header()
あり(loading属性あり)
https://sweet-router.localsite.io/hello-world
amusement / loving
get_header()
なし(loading属性あり)
https://innate-sunrise.localsite.io/hello-world
recipe / flashy
Ver 6.4.0(以降すべて同様の挙動のようです)get_header()
あり(loading属性なし)
https://cuddly-spiral.localsite.io/hello-world
parachute / general
get_header()
なし(loading属性あり)
https://panicky-mine.localsite.io/hello-world
jewelry / noiseless
仕様でしたらこの辺りのドキュメントを探しておりますので、ご存知の方がいらっしゃいましたら教えていただけますと幸いです。
(2025-3-20)こんにちは😃
その後、状況いかがですか?
これはあくまでも想像ですが、子テーマの category.phpを削除で解決しそうな気がしています。
archive.php とか loop.php の中で条件分岐させてるとかだと、話は別です。
いろいろ試してみましたが
いろいろでは、何をどう試したのかが分からないので、具体的に何をどうしたのかを説明してもらえないでしょうか?
子テーマの中身は確認されましたか?
確認されたのであれば、中にどんなファイルがあるか教えてください。
Yukinobu Asakawa(@yukinobu) さん
まーちゅう(@rocketmartue) さん
ありがとうございます。
ご教授を受けて、いろいろ試してみましたが力不足で、できませんでした。
カテゴリーページの
https://mowappu.jp/category/notice/ を
タグページの
https://mowappu.jp/tag/tg-notice/ と同じような「タイル表示」にしたいだけなのですが…。
なにかいい方法、ありませんでしょうか?
こんにちは。
https://mowappu.jp/category/inform/ のサイトを確認しましたが、実際に使用されているテーマは、「マテリアル2」ではなくて、「マテリアル」の子テーマのようです。
/*
Theme Name: マテリアル_child
Template: wp_material
Description: マテリアルの子テーマ
Version: 1.1.0
Author URI: http://wp-material.net
*/
/*
Theme name: マテリアル
Author: Nobuo_CREATE
Author URI: http://wp-material.net
Version: 4.0
*/
テーマのデフォルトの状態だと、カテゴリーページもタグページと同じレイアウトです。
子テーマ側で、何かカスタマイズされていると思いますので確認してみてください。
こんにちは👋
すみません。
お尋ねの「マテリアル2」テーマですが、WordPress.org 掲載のテーマ以外は、規約上、このサポートフォーラムでサポートすることができません。
お役に立てず申し訳ありませんが、ご了承ください。
その上でですが、「マテリアル2」テーマの情報を少し検索しましたが、情報が少なく、今現在も配布・サポートされているのでしょうか?
もし配布もサポートも終了している場合には、お問い合わせすることも現実的に難しいと思いますし、
古いテーマを使い続けることはセキュリティー上のリスクを抱えることになりますので、おすすめできません。
今のテーマであれば、ご質問の内容についてもブロックテーマ、ブロックエディターで比較的簡単に編集ができると思いますので、サイトの運用も今後もお続けになるご意向なのであれば、見直しすることもご検討ください。
(2025-3-8)「マテリアル2」のカテゴリページテンプレートについて、ご教授ください。
古いテーマであることは十分承知していますが…。
タグページや年月アーカイブのページは、タイル状に表示されますが、カテゴリページのみ総覧で表示されてしまいます。
カテゴリページ
https://mowappu.jp/category/inform/
タグページ
https://mowappu.jp/tag/tg-inform/
タグページや年月アーカイブのページと同じように、カテゴリページもタイル状に表示したいと考えています。
どのように修正や設定すればよろしいでしょうか?
お分かりいただける方、ご教授いただければ幸いです。