OneThird CMS

Lightweight CMS for Small website, Web application framework.

Download Document

english

WAFとOneThird CMSでのセキュリティについて

WAFについて

WAF(Web Application Firewall)は、CMSと非常に相性が悪くOneThird CMSでも通常のWAF動作下では動作しないと考えられます

もし、WAFと共存させたい場合は、公開用のURLに加えてアクセスできる更新用のURLをもう一つ作り、BASIC認証をかけそのURLだけWAFをはすず方法があります

URLを2つ作るには、apacheの設定を行った後、config.phpに以下の記述を行います

	if ($_SERVER["SERVER_NAME"]=="domain1.com") {
		$config['site_url'] = "https://domain1.com/";
		$config['site_ssl'] = "https://domain1.com/";
		$config['files_url'] = "https://domain1.com/files/";
		$config['canonical'] = "http://domain1.com/";
	} else {
		$config['site_url'] = "http://domain2.com/";
		$config['site_ssl'] = "https://domain2.com/";
		$config['files_url'] = "http://domain2.com/files/";
	}
   

例では、domain1.comが通常ユーザーが使うWAF付きのURL、domain2.comがBASIC認証をかけたURLとなります


なお、OneThird CMSでは、ローカルPCでサイトを作成しワンタッチで本番環境に転送できるシステムになっています

WAFを有効にしたまま運用するには、URLを2つ作るよりこちらのほうが簡単です


OneThird CMSのセキュリティについて

OneThird CMSでは、基本的なセキュリティ対策に加え、以下の点を特に強化しています

  1. 文書タイトルと、本文中以外のデータに対し脆弱性が入りやすい文字列、<>と”(ダブルコーテーション)’(シングルコーテーション)が使えなくなっている(標準のサニタイズ関数ですべて取り除かれる)
    → 不便な点もありますが、できる限りにDBに制御文字が入らないようにする方針です
  2. すべてのPOSTデータにトークンが必要
    → トークンがないPOSTはすべてエラーとなります、また非ログイン状態でトークン無しのPOSTが続いた場合、そのIPアドレスからのアクセスを攻撃とみなしシャットアウトします
  3. アクセス可能なphpプログラムの配置フォルダを隠す機構が組み込まれている
    → コンパネ周りのURLとログインURLを隠すことにより攻撃されにくくなります


コンパネ周りのURLとログインURLを隠す

WordPressなどのCMSでは wp-login.php をスキャンされ攻撃されるのは有名な話です

また、脆弱性を含むadmin以下のphpファイル郡に直接アクセスされ、サイトを改ざんされるケースも散見されます

本来セキュアに設計されたプラグラムに攻撃は成立しないのですが、プログラムだから100%はありません

そこで保険的対策として、管理プラグラムをすべて隠してしまおうという方法が以下に説明するやり方です

OneThird CMSでは、アクセス可能なphpプラグラムはindex.php及び、admin以下のプログラムだけです

adminフォルダにBASIC認証をかけるだけで外部からの攻撃に強くなりますが、多少面倒です

そこでv1.70よりもっと簡単に、ログインプログラムを含む全ての管理プログラムのURLを隠す方法をCMSの機能としてサポートしました

 v1.70以前もログインurlは変更可能でした、以前の方法を、使っている方はこちらの方法に変更してください

変更は簡単、ファイルを2箇所変更するだけです

まず、config.phpに

$config['admin_dir'] = 推測されにくい文字列;

と設定してください

v1.70以降にインストールされた場合は、はじめから$config['admin_dir'] エントリが書かれていますのでコメントアウトしてください


推測されにくい文字列は、運用に差し障りがない長さの文字列にしてください

ここでは、admin01ab

を設定したとします

次に、インストールフォルダ直下の.htaccessを開き、

RewriteEngine On

のすぐ下に

RewriteRule ^.*/?(admin[0-9a-zA-Z]*)/(.*)$ index.php?__admin=$1&__pg=$2&%{QUERY_STRING} [L] 

を書き加えてください

これもv1.70以降にインストールされた場合は、該当行をコメントアウトしてください


この修正を行うと、ログインURLが

インストールURL/login

から インストールURL/admin01ab/login

へ変更されます


ログインURLの桁数について

例ではURLに加えた文字列は4桁となっており少ないと考えられると思う方もいらっしゃると思います

ですが4桁でも破られる確率は1600000分の1程度で、しかもこのURLがわかったところでログインできるわけではありません

URLを変える意味は、ボットによる無差別攻撃を回避するためです

さらに、.htaccessに

RewriteRule ^.*/?(admin[0-9a-zA-Z]*)/(.*)$ index.php?__admin=$1&__pg=$2&%{QUERY_STRING} [L] 

と書いてあるため、インストールURL/admin01ab/login 以外の インストールURL/admin??? にアクセスすると、本来のURLでないためボット攻撃とみなします

具体的には、同一IPで、間違ったURLに100程度のアクセスが集中すると次の日までアクセスをシャットアウトするようになります

このため、ログインURLをスキャンによって特定することは困難です

そういうわけでURLはあまり長くなくてもOKです

もちろん、運用上問題なければ長くしても構いません

上記理由より、URLを隠した場合、通常ページにadmin???といったページエイリアスは作成しないでください


更にセキュアに運用したい場合には静的出力を使うことをお勧めします

多くのプラグインが使用できなくなりますが、特に必要ないサイトについては速度面とセキュリティ面から静的出力をおすすめしています

OneThird CMSでは、簡単に静的出力が行え更に出力先も自由に設定できます

ぜひお試しください