
1.QMAC.JPの画面の改善
1-1. 静的アーカイブ(2007年以前のHP)をテーマの枠中に
1992〜2007年度の旧サイトHTML 39本が、ヘッダー・サイドバー・フッターの外に置かれていた
原本は書き換えず、配信のたびにPHPで変換する方式とした・・旧サイトの記録としての価値を損なわずに、見た目だけを揃る
/archive/2007/ → 00Index/Activities/2007(H19).htm を読む
→ の中身だけ抽出
→ 挿入ナビ・SSIコメント・重複フッターを除去
→ 相対パスを絶対URLに変換
→ .qmac-legacy で包んでテーマのテンプレートに流し込む
1-2. その他の改善
- 連絡先の移動・・ フッターは画面下端で見えないため、サイドバー最下部へ
- フッター 「© 2026 中国地区品質経営協会」のみ中央寄せ
- マニュアル
管理者・編集者以外にはサイドバーに表示しない - ログインボタン
ヘッダー右下。未ログイン時「ログイン」、ログイン時「管理画面」
2.セキュリティ対策
2-1. 現状調査
| 観点 | 評価 |
| 攻撃されやすさ | 良好 — プラグイン1本、パーミッション適正、改ざんなし |
| 侵入時の被害 | やや弱い — 管理者が管理画面からPHPを書き換えられた |
| 気づけるか | 弱い — 改ざん検知なし |
| 戻せるか | 最も弱い — バックアップが全て同一サーバー内 |
| 続けられるか | 最も弱い — プラグイン・テーマの自動更新がオフ |
WordPressサイトの多くは「プラグイン20本・未更新・権限管理なし」という状態にあることが多い
主な発見
| 発見 | 深刻度 |
| プラグイン・テーマの自動更新がオフ | 高 |
| バックアップが同一サーバー内のみ | 高 |
| XML-RPC が有効(system.multicall が使える) | 中 |
| http://qmac.jp/ が暗号化されずに表示される | 中 |
| セキュリティヘッダがほぼ未設定 | 中 |
| 検証環境に wp-config.php.orig(DBパスワードが平文) | 中 |
| 公開フォルダに.bak系が25本 | 低 |
| DISALLOW_FILE_EDIT が未設定 | 中 |
2-2. 実施した対策
- ① wp-config.php.orig の削除・・検証環境の公開フォルダに、DBのパスワードが平文で書かれたファイルが置かれていた・・.orig はPHPとして処理されないため、Basic認証が外れた瞬間に中身がそのまま読める
- ② .bak 系61本を公開フォルダ外へ・・.bak → .new → php -l → mv という作業手順を守った結果、2日間で61本が蓄積していた・・手順そのものは正しいが、公開領域に残す理由がない
- ③ DISALLOW_FILE_EDIT・・管理画面からのテーマ・プラグイン編集を禁止・・管理者が乗っ取られても、PHPを書き込まれない・・ISALLOW_FILE_MODS は入れていない(自動更新まで止まるため)
2-3.自動更新の有効化
公式テーマとXserver製プラグインの自動更新で壊れる確率は低いので、自動更新にする
cloudsecure-wp-security → 自動更新 ON
twentytwentyfive(親) → 自動更新 ON
qmac / qmac-core(自作) → 対象外
2.4.HTTPS常時化とセキュリティヘッダ
http://qmac.jp/ がそのまま200で表示されていた。暗号化されない経路が生きている状態
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
Header always set X-Content-Type-Options “nosniff”
Header always set X-Frame-Options “SAMEORIGIN”
Header always set Referrer-Policy “strict-origin-when-cross-origin”
Strict-Transport-Security と Content-Security-Policy は入れていない。設定ミスでサイトが開かなくなり、HSTSはブラウザが記憶するため取り消しが効きにくい
2-4.XML-RPC の無効化
system.multicall は1リクエストに数百通りのパスワードを詰められる。ログイン試行制限を実質的に回避される・・無効化の前に POST system.listMethods が 78メソッドを返すことを実測し、変更後に403になることを確認

