質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

6回答

2111閲覧

隠したはずのPHPファイルにアクセスされてしまうのは、なぜでしょうか?

ichikaihatsusya

総合スコア13

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

Webサーバー

Webサーバーとは、HTTPリクエストに応じて、クライアントに情報を提供するシステムです。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

5クリップ

投稿2018/10/24 03:12

編集2018/10/26 07:26

前提・実現したいこと

 一部のユーザーだけがアクセスできるPHPファイルを用意して、他の方法からアクセスしたユーザーを制限したい。(正規ユーザー以外がPHPファイルにアクセスしないようにしたい)

発生している問題

 PHPファイルのURLを長く、複雑なものにして、一見わからないようにしたのですが、アクセスログをみるとそのファイルへのアクセスがあったようです。
ロボットやツールか何かでアクセスされているのだと思うのですが、対策が分かりません。

質問

 ①アクセスユーザーは、どのようにしてそのファイルのありかが分かるのでしょうか?
②ファイルを完全に隠すにはどのようにしたらよいでしょうか?
③上記②が不可能な場合、IPアドレスの偽装をチェックしてアクセスを防ぐなどの方法は可能でしょうか?

該当のソースコード

PHP

試したこと

①ドキュメントルートの.htaccessに下記の記述があります。
Options -Indexes
DirectoryIndex index.html index.php

②SSL認証

③アクセス制限(認証)の方法
パスワード等で正規ユーザーを判断して、それ以外のユーザーは弾くようにしています。

以上、お忙しい中恐れ入りますが、ご回答いただければ幸いです。
よろしくお願いいたします。

補足

上記のPHPファイルは、クライアントのPCソフトからHTTPでアクセスする方法で実現したいと考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/10/24 03:32

これはどういうこと?ブラウザから? >クライアントのPCソフトから
m.ts10806

2018/10/24 03:34

あとどのように認証させようとしてるかとか具体的に書いてください。「ファイルへのアクセス」は例えエラーページに遷移させたとしても一度はアクセスすることになりますが、webに公開されている以上は不可能です。IP制限かけるくらいしかありません。それかwebに公開しないとか。
ichikaihatsusya

2018/10/24 03:35

通常のブラウザ以外で、HTTPアクセスできるソフトウェアを提供しようと思っています。
m.ts10806

2018/10/24 03:36

特殊なアクセスなら具体的に記載されないと的確なアドバイスは臨めないかと
m.ts10806

2018/10/24 03:40

httpアクセスできるならブラウザでもアクセス可能なんですよね?そのソフト以外からのアクセスは403エラーとするとか。
ichikaihatsusya

2018/10/24 03:41

書き込みありがとうございます。Webに公開とはいえ、複雑かつ通常はわからないURLでも、何らかの方法でわかってしまうということでしょうか。隠しているファイルの在処が分かってしまうのが、非常に気持ち悪いのです。
m.ts10806

2018/10/24 03:50

公開されてるものであれば総当たり攻撃でもなんでも特定することは可能です。例えば京都の住所とか長くて複雑なものが多い(だからか2つあるようですが)けど、辿り着くことは可能ですよね。アクセスの仕方が直アクセスであれば何かしらで総当たりかけられてる可能性はありますが、この情報だけではわかりません。ただ、幾らでもやり方はあります
m.ts10806

2018/10/24 04:08

機械的にアタックするのであれば「長い」は人間的な都合でしかなく、機械にとってはただの文字列の組み合わせでしかありませんから。
ichikaihatsusya

2018/10/24 04:35 編集

総当たりであればアクセスログが残りそうなものですが、ピンポイントにそのファイルを狙っているような感じでしたので、なぜ分かるのか不思議で・・・。何にせよ、おっしゃるとおりやり方は色々あり、ピンポイントに狙う方法もあるということですよね。ご回答に感謝いたします。
guest

回答6

0

ベストアンサー

①アクセスユーザーは、どのようにしてそのファイルのありかが分かるのでしょうか?

ファイル名が十分長い乱数であれば、それをたまたま当てることは不可能なので、「どこかから漏れた」と考えるのが妥当かと思います。
いただいた情報からは漏洩原因は推測できませんが、ありえる可能性としては以下のようなものがあります。

  • ディレクトリリスティングが有効になっていた(Options -Indexesで防げるはずだがなんらかの理由で無効になっていた等)
  • PHPファイルに外部サイトへのリンクがあり、RefererからURLが漏洩する
  • PHPファイルにアクセスしたPCがウイルス感染している
  • 途中にPROXYサーバーがあり、PROXYサーバーの管理者が悪さをしている
  • ウェブサーバーが外部から侵入されている

あまり愉快な理由はありませんが、ファイルの存在を隠したい場合、「ファイル名を十分長い乱数にする」というのは、あまり推奨されないものの、現実には使われている方法です。私の知っている例だと、ジャパンネット銀行の取引明細PDFはこの方法で保護されています。ネットバンキングでも採用例がある、という程度には安全であるわけです。

②ファイルを完全に隠すにはどのようにしたらよいでしょうか?

他の方も書いておられるように、しかるべき認証(BASIC認証など)を使うのが簡便かと思います。HTTPSにすることも、現在ではほぼ必須です。

③上記②が不可能な場合、IPアドレスの偽装をチェックしてアクセスを防ぐなどの方法は可能でしょうか?

IPアドレスの偽装チェックは、TCP/IPのレイヤーでなされているので、アプリケーション側では不要だし、偽装のチェックをアプリケーションで実装することは難しいと思います。大昔にはTCP/IPでIPアドレスの偽装ができた時代がありましたが、これはTCPの脆弱性として修正されています。UDPの場合は、IPアドレスの偽装は容易なので、上位レイヤーで対策する必要があります。HTTPはTCPなのでIPアドレスは信頼できると考えてよいかと思います。
もっとも、TCPの場合でも、利用者とウェブサーバーの通信経路上の端末であればIPアドレスは偽装できますが、その状況は通常想定しなくてもよいでしょう。


コメントへの回答を追記します。

①現状、当該PHPファイルへのリンクは、自社で提供しているクライアントソフト(exe)から、HTTPS通信で情報を送信しているところだけです。その場合、HTTPSでもリンク先がわかってしまうものでしょうか。

通信からはリンク先URLはわかりません。通信先のIPアドレスとホスト名はわかりますが、URLのパス名はわかりません。
しかし、exeそのものを解析されたりすると、わかる可能性が高いと思います。

②ウェブサーバーはIP制限されているため、外部の侵入はあまり考えられません。今一番可能性があるのは「ディレクトリリスティングが有効になっていた」ということだと思っているのですが、無効になる場合はどんなケースなのでしょうか?

端的にいうと設定が間違っている場合です。以下のように書かれていますが…

①ドキュメントルートの.httaccessに下記の記述があります。
Options -Indexes
DirectoryIndex index.html index.php

.httaccessではなくて、.htaccess ですね。質問時のタイプミスかもしれませんが、仮にサーバー上でもファイル名が間違っていると、この設定は有効になりません。
あるいは、httpd.conf側で AllowOverride None などの設定があると、.htaccess があっても無視されます。

投稿2018/10/26 04:22

編集2018/10/26 07:17
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/26 06:34 編集

丁寧なご回答、ありがとうございます。専門的な内容で、勉強になります。おっしゃるとおり、かなり長い乱数でURLを設定しておりました。 他のサービスにも使われている方法だと思っていましたので、なぜ判明したのかが不思議で仕方ありませんでした。 もし、お時間がゆるせば、下記の2点についてご教示いただけませんでしょうか? ①現状、当該PHPファイルへのリンクは、自社で提供しているクライアントソフト(exe)から、HTTPS通信で情報を送信しているところだけです。その場合、HTTPSでもリンク先がわかってしまうものでしょうか。 ②ウェブサーバーはIP制限されているため、外部の侵入はあまり考えられません。今一番可能性があるのは「ディレクトリリスティングが有効になっていた」ということだと思っているのですが、無効になる場合はどんなケースなのでしょうか? お忙しいところ大変恐れ入りますが、よろしくお願いいたします。
ichikaihatsusya

2018/10/26 07:36

追記のご回答ありがとうございます。 失礼しました。.httaccessはタイプミスです(修正済み)。サーバー側では.htaccessになっています。 .htaccessの他の設定は反映されているようなので、AllowOverride Noneの設定がされているか確認してみます。ご回答に感謝申し上げます。
ockeghem

2018/10/26 07:42

AllowOverride None はだめな例で、正しい例は AllowOverride All などですよ
ichikaihatsusya

2018/10/26 07:54

はい、AllowOverride Noneの設定自体がされているかを確認してみて、されていたら修正したいと思います。 アクセスログには、IPを変更して定期的にアクセスされているようなので、何らかのツールでセキュリティの穴でも探しているのでしょうか・・・。 不正なアクセスは全部弾いてはいますが、サーバー内をのぞかれているようで気持ち悪いものです。
guest

0

完全に隠すのは無理です。
隠したいHTMLが外部リソースを参照していたら、外部サーバのアクセスログに残ります。
正規ユーザでも〇〇ツールバーみたいなブラウザの機能拡張が外部にアクセスしたURLを送信することもあります。
ブラウザベンダーがアクセスログを収集している可能性もあります。
例をあげたらきりがないですが、公開している以上、認証機能を付けるしかありません。

投稿2018/10/24 03:44

tabuu

総合スコア2449

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/24 04:31 編集

ご回答、ありがとうございます。なるほど、やはり公開しているかぎり、認証無く隠すのは難しいのですね。
guest

0

①アクセスユーザーは、どのようにしてそのファイルのありかが分かるのでしょうか?

どこかのグローバルなページから、そのファイルへのリンクが張られていた、等のケースが考えられます。

もしくは、隠したいファイルが
http://example.com/test/hoge.php
だったとして、
http://example.com/test
にアクセスすると中のファイル一覧が見える設定になってしまっている……というケースもありえるかと。

②ファイルを完全に隠すにはどのようにしたらよいでしょうか?

(存在自体は隠せない案ですが)「一部のユーザーだけがアクセスできるPHPファイル」を満たす案として、Basic認証をかける、というのはいかがでしょうか?

参考:
https://qiita.com/mpyw/items/dc2cb3632370389d700e

アクセスする際、IDとパスワードが必要になりますが、IDとパスワードを知っている人以外はアクセスできなくなります。

投稿2018/10/24 03:23

nak

総合スコア696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/24 03:33

詳細なご回答、ありがとうございます。.httaccessにOptions -Indexesを設定しているので、ファイル一覧は見えないはずなのですが、いかがなものでしょう。リンクも公開ページからはされていないので、なぜファイルの在処がわかったのかが分かりません。完全に隠すのは無理なのでしょうか・・・。
papinianus

2018/10/24 03:36 編集

Options -Indexes すみません、コメントがロードされておらず、同じことを書いてしまいました。
guest

0

セッションでログイン情報をキープできるなら、指定ユーザー以外からのアクセスの際
not foundを返す処理を入れればよいでしょう。

投稿2018/10/24 03:21

yambejp

総合スコア114839

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/24 03:31

早速のご回答ありがとうございます。正規ユーザーの場合は何らかの認証をして判断するのですが、そもそもPHPファイルの存在が分かっているのが不思議です。完全に隠すのは難しいのでしょうか・・・。
guest

0

一般的には Basic認証もしくは IP アドレスによるフィルタリングを使うと思います。

投稿2018/10/24 03:16

ssasaki

総合スコア1167

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/24 03:24

ご回答ありがとうございます。上記のPHPファイルは、クライアントPCのソフトウェアからHTTPでアクセスする形で考えています。そのため、IPアドレスによる制限以外で検討しています。 認証したユーザーだけがアクセス出来るようにはしますが、そもそもPHPファイルの存在を隠したいと思っています。
ssasaki

2018/10/24 03:42

Basic認証はファイルの存在自体も隠せますよ。 例えば、 http://xxx.xxx.xxx/yyyy/zzzz.php この場合は、yyyy/ に Basic認証をかければ yyyy/ 以下にアクセスしようとすると認証が入るので、認証を通らない限りファイルの存在も分かりません。
nak

2018/10/24 03:49

たしかに! ディレクトリの存在はわかってしまうものの、この方法ならファイルは隠せますね(目から鱗……)。
ichikaihatsusya

2018/10/24 04:34

おぉ、そんな方法が可能なのですね。大変勉強になります。隠していた(つもり)ファイルにアクセスされると、サーバーの中身を見られているような気がして、アクセスの理由とそれを防ぐ対策をしたいと考えていました。
guest

0

このようなケースもあるよというレベルですが。

例えばSlackやSkypeなどのようなツール(URLを貼り付けた際にプレビュー表示を行うもの)を使ってURLを通知したり、GmailなどのWebメールをつかって通知している場合、URLを発見した時点でそのツールからアクセスがある場合があります。

ツールサイドではそのURLが制限されているものかどうかはわかりませんので、とりあえずアクセスし、プレビュー(サムネイル)が取得できれば表示し、できなければ表示しないといった動作が行われます。

画面表示するたびにリトライするようなものであれば、たびたびアクセスが発生するでしょう。

投稿2018/10/26 06:36

kaz.Suenaga

総合スコア2037

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ichikaihatsusya

2018/10/26 07:05

ご回答いただき、ありがとうございます。なるほど、他ツールにURLをアップした記憶はないのですが、そういう方法からの漏れもありえるわけですね。勉強になります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問