Codeworks Notes

 2020-03-10

 2020-08-21

Wordpress
バックエンド

WPサイトのセキュリティを高める配慮

パスワードを複雑な文字列にするとかそういう次元じゃないところを固めましょう、という話。

サイバーな攻撃を受けにくくするために

できることをしましょう。
身を守るためにできることをするのは無駄ではありません。

SiteGuard プラグインを使う

ログインページ変更」は優秀です。
ロボットは wp-login.php にアタリをつけて叩いてくるので、ログインページを変えておけば大抵のロボットはログインページまでたどり着けません。

ただし、デフォルトで「ドメイン/login_xxxxx 」とランダムな5桁の数字を付けますので、このままでは 10 万回試行されたら当たるとこに当たります。
文字列も別のものに変えるとよいでしょう。

変更するときは変更後のログインページ URL を控えること。でないと二度とログインできなくなることがあります。ほか、それっぽい URL にアクセスしても親切にログインページまで飛ばす動作をやめさせるのに「管理者ページからログインページへリダイレクトしないのチェックを入れること。

画像認証」も有効にします。
ロボットのログイン試行を邪魔してくれます。

管理者ユーザー名を見えないようにする

Linux に Ruby を入れて WPscan を実行するとユーザー名の一覧を取得できます(それをやるのは本当はよろしくない)ので、取得されるユーザー名が別のものになるように書き換えておきます。

Edit Author Slug プラグインを使う

Edit Author Slug はユーザー名のスラッグを書き換えるためのプラグインです。これでスラッグを書き換えておけば WPscan を受けても正しいユーザー名が取得されなくなります。

アドレスバー直打ちも対策する

アドレスバーに「ドメイン/?author=1 」など入力すると、有効な WordPress ユーザーの投稿者別記事一覧が表示されます。これ自体は WordPress の本来の機能なのですが、「ドメイン/?author=1 」と入れてアクセスされるリダイレクト先 URL は「ドメイン/ユーザースラッグ 」ですので、ここからユーザー名を探ることも可能です。

投稿者別の記事一覧が不要であれば、投稿者テンプレート author.php を作成して 404 などに飛ばしてしまうのが一番です。

<?php
	$url_redirect = "/404";
  wp_redirect($url_redirect);
?>

これだけで機能します。
ステータスコードも404になるので問題ありません。
404 テンプレートも作っておけば完成です。

自前フォームを設置している場合

フォームの送信内容は post 先で受けた時にエスケープ処理をします。
htmlspecialchars() でサニタイジングすることで SQL インジェクションを無効化することができます。

フォームの一例

<form method="post" action"送信先">
  <input type="text" name="hoge" placeholder="fuga">
  <input type="submit" value="送信">
</form> 

受けた側の処理の例

<?php
  $hoge = htmlspecialchars($_POST['hoge']);
?>

<p><?php echo $hoge; ?></p>

name="hoge" に指定されたフォームの入力内容は、htmlspecialchars() によって特別な処理を行う特殊記号を「ただの文字列」に変換して変数 $hoge に返すようにします。

これをしないとデータベースの中身を全て吐き出させるような SQL 文がフォーム経由で実行されるリスクが生じます。