PukiwikiでKcfinder(Easyedit.inc.php)を使用していましたが、初期状態ではKcfinderのは非常に危険だと気付き急いでBasic認証を設定しました。
ですが、Basic認証を実装後にページの画像が表示されない、閲覧者全員がサイトアクセス時にログインを求められる等の現象が発生してしまい思うよう動作しません。
技術者ではない私は解決に至るまでかなり苦戦したので、同じ境遇の方への参考になれば幸いです。
当記事では経緯と具体的な設定方法、注意点についてまとめました。
初期設定でのセキュリティー危険性
簡単に言うと、サイト編集権限や未ログインの第三者から自由にKcfinderサーバーへアクセス出来てしまいます。
悪意のあるファイルやウィルス、マルウェア等が第三者によってアップロードされ悪用される危険性があります。
誰でもサーバーブラウザ画面にアクセスできる
お使いのサイトからログインし、kcfinderのサーバーブラウザを開くと次の画像のようになります。
一見、ログインを介しているためセキュリティ的には問題無いように見えます。
ですが、実はサイトにログインせずともサーバーブラウザのURLを知られていると、全く関係ない第三者がこの画面にアクセス出来てしまうのです。
②問題の確認方法
以下のいずれかの方法で確認が可能です。
URL欄に先ほどのサーバーブラウザページのURLをコピペしてアクセスしてみてください。
サイトにログインしていなくとも、サーバーブラウザにアクセスし自由にファイルを閲覧したりアップロード、削除が可能になっている筈です。
この状態は非常に危険であり、今すぐ治したいですよね。
①シークレットタブ
GoogleChromeであればCtrl+Shift+Mでシークレットタブを開けます。
②別のデバイス
別端末で試します。携帯や、信頼できる他の方にURLをチェックして貰っても良いです。
③別のブラウザー
普段使用していない(ログインしていない)ブラウザを使用してみましょう。
基本的なBasic認証の付け方
ファイル階層自体にBasic認証を付ける一般的な手順を紹介します。
.htaccessファイルを作成
認証を付けたいファイルと同じ階層に直接作成します。(ディレクトリのルートに配置)
AuthUserFile には、.htaccessファイルを作成したファイル階層のフルパスを指定します。
.htaccessファイル内のコード
AuthType Basic
AuthName "Login"
AuthUserFile [認証を付けたいファイル階層フルパス].htpasswd
Require valid-user
<Files ~ "^.(htpasswd|htaccess)$">
deny from all
</Files>
ログインに必要なIDとパスワードを決める
IDとパスワードを設定します。以下のサイトを使用するのをおすすめします
任意のIDとパスワードを入力し生成する
ここでは例として以下のIDとパスワードを入力し生成します。アクセス認証時のログイン情報になります
ID:guest
Password:guest001
出力結果
IDとパスワードを基にしたコードが生成されました。これを使用します。
.htpasswd: guest:HEiIrsuouq/go
.htpasswdファイルを作成
最初に作成した.htaccessファイルと同じ階層に.htpasswdファイルを作成します。
先ほど生成したコードを使用します。1行だけで大丈夫です
.htpasswdファイル内のコード
guest:HEiIrsuouq/go
終わり
作成した2つのファイルがckfinderのファイルの中にあり、同じ階層にあれば設定完了です。
これで不特定の第三者から特定のファイルへアクセスされる/不正アップロードされる事は無くなりました。
URLから直接サーバーブラウザへアクセスしてもユーザー認証が必要になり、第三者からログイン無しでアクセスすることはできません。
基本のBasic認証の問題点
サイト閲覧時にも毎回認証が必要になる
セキュリティ的な面では解決しましたが、サイトへのログインの他に、画像のアクセスの為の2段階ログインが必要になります。
一般の訪問者やユーザーがサイトに訪れたとき普段当たり前に表示されている画像の表示にもログインが必要になり、毎回ログインポップアップが表示されてしまいます。
これでは一般向けにサイト公開する際にまともに使えたものではありません。
以下に2つの例を示します。
問題点プレビュー
Basic認証設定前
Basic認証を付ける前の状態です。ページ内では画像が2つ表示されています。
ですが、サーバーブラウザURLを入力するだけで誰でもアクセスできる状態であり非常に危険です。
Basic認証設定後
先述したBasic認証を設定した後の状態です。
サイトにアクセスした瞬間にログインを促すポップアップが表示され、Basic認証設定前には見えていた2つの画像が表示されなくなりました。
ファイルブラウザ画面には第三者からアクセスされなくなりましたが、一般ユーザーの訪問時の表示にすら認証がかかってしまい、まともに使えたものではありません。
問題の解決策
.htaccessを書き換える
先ほど作成した.htaccessファイルを書き換えます。
<Files>を変更し、2つ分追加します。全てコピーして書き換えてよいです。
kcfinderでは “upload.php”と”browse.php”がファイルアップロードやブラウザに関連しているようです。
[認証を付けたいファイル階層フルパス]に、最初の項目と同じパスを入力します。
<Files "upload.php">
AuthType Basic
AuthName "login"
AuthUserFile [認証を付けたいファイル階層フルパス].htpasswd
Require valid-user
</Files>
<Files "browse.php">
AuthType Basic
AuthName "login""
AuthUserFile [認証を付けたいファイル階層フルパス].htpasswd
Require valid-user
</Files>
解決後のプレビュー
サイト訪問者視点
サイトアクセス時にしっかりと画像が表示されました。
ログインしていないユーザーがURLでファイルブラウザにアクセスした場合
サイトにログインしていないユーザーがURLからアクセスした場合の挙動です。
シークレットタブや別端末で試してみてください。
ログイン画面が表示され、ログインに失敗した場合には401エラーを返します。
終わり
これにて設定は完了です。いずれの方法にしても、サイト編集者は二重でログインが必要になりますが、この方法では仕方無いですね。(サイトログイン→ファイルブラウザにログイン)
私は今の状態で満足に使用出来ていますが、本当にセキュリティを高めるにはファイル階層を予想しづらくするために名前を変更したり、技術的なコードを追加してセキュリティを固める必要があるそうです。
コメント