- ベストアンサー
読み込み先を制限するには…
いつもお世話になっています。 現在ショッピングサイトを運営しているのですが、基となるindex.phpにファイルを読み込み形式をとっています。 * クエリーの種類 * h:指定されたファイルを読み込む * d:指定されたディレクトリのbody.htmlを読み込む 実際呼び出す際のURL:http://www.****.jp/?d=camp 上記のように入力するとindex.phpにcampフォルダのbody.htmlが読み込まれ表示する仕組みです。 しかしながら最近、http://www.****.jp/?h=http://www.yahoo.co.jp/などURLを直接アドレスバーに入力しサイトとは無関係のファイルを呼び出すユーザーがいて困っています。 サイトのドメイン(今回はhttp://www.****.jp)や指定したファイル以外のサイトから呼び出した場合エラー画面(error.php)を表示させるようなアクセス制限は可能でしょうか? 現在のスクリプトは下記の通りです。 ------------------------------------------------------------- //メインメニューのクエリーを作る $mainQuery = array( "home"=>"?", //表示する //ルートのHTMLを直接指定していた場合は問答無用で塗り替え $showedBody = "home.php"; if($_REQUEST["h"]){ $showedBody = $_REQUEST["h"]; ------------------------------------------------------------- どうかお力をお貸し頂けたら嬉しいです。 その他不足のスクリプトなどあれば回答時にご指摘頂ければ補足させて頂きます。 よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>スクリプトを私自身で書き加えるのは難しいでしょうか? PHPはコンパイルが不必要なので、スクリプトを修正するだけで簡単に変更できますが、 プログラム経験がまったく無いと、何をどう修正すればいいか解らないと思います。 先の返答にはrequireを無条件で使用しているのではないかと返答しましたが、 実際には、どのように実装されているかは、このサイトの回答者にはわかりません。(もっと情報提供されれば解る可能性もありますが) つまり、あなたがスクリプトを解析して真の原因を突き止めるだけの、 デバッグ経験をお持ちであれば直せると思います。 PHPは簡単ですしね。 あと、失礼かもしれませんが、「requireにパラメータを無条件で使用」するようなプログラマは、プログラムスキルの程度が知れていますので、 スクリプトが、非常に見にくい可能性があります。 もしあなたが修正するならば、スクリプトを解読するスキルも必要になる可能性があります 私は昔、1関数が2万行のふざけたPHPスクリプトを触らされた事があります。(怒)こんなスクリプトになっていないことを願います。
その他の回答 (3)
- racci
- ベストアンサー率64% (9/14)
そのレンタルサーバ内に、顧客の個人情報やクレジットカード情報など重要な情報は置いていなかったでしょうか。 脅かすようで申し訳ありませんが、もし置いていた場合、それが盗まれた可能性があります。また、requireやincludeを使用していた場合、サーバに不正なプログラムを設置された可能性もあります。 プログラムの開発業者との契約内容次第ですが、納品物のセキュリティ上の欠陥を直ちに修正すること(直ちに修正できない場合、一時的にサイトの全体もしくは一部を止めることも検討)、ログやサーバ内のファイルなどを確認して、どのような不正行為が外部から行なわれたのかの調査、を要求した方が良いと思います。
お礼
ご回答ありがとう御座いました。 クレジットカード情報や個人情報は扱っていないため問題御座いませんでした。 現在サイト全体をメンテナンスとし止めています。 不正な内容は一つのファイルに原因があり、ディレクトリ外のファイルを読み出せるため海外にアクセスし高負荷が生じることのみのようです。
hが指定された場合、無条件でrequire_once等にパラメータ(ファイル名)を渡していませんか? dが指定された場合は、ディレクトリを指定するので、 サーバ内のディレクトリを検索して、 無ければerror.phpを出し、 hが指定された場合も、パラメータで渡されたファイルが サーバ内に存在するかチェック(ファイル検索)して、 なければerror.phpを出せばよいのではないのでしょうか?
お礼
回答有難う御座いました! >>hが指定された場合も、パラメータで渡されたファイルが >>サーバ内に存在するかチェック(ファイル検索)して、 >>なければerror.phpを出せばよいのではないのでしょうか? とても有効なご意見有難う御座いました! スクリプトを私自身で書き加えるのは難しいでしょうか? 私自身PHPにあまり詳しくなくメインのシステムを外注しています。 自分でできれば!と思っていましたが…なかなか難点がありそうなので一度上記の内容をシステム開発業者と直接相談してみたいと思います。 迅速な回答有難う御座いました!
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
何故困っているのでしょう? セキュリティと挙動的に問題が無いのでしたら、それでもいいと思いますが。 事実、このサイトも、直接パラメータを指定したURLを打てばその通りに動作します。 不正な値が入っている場合にのみ弾くのではダメなのですか? 今回の場合、hパラメータはファイルなのですから、指定されたファイルの 存在チェックを行うだけで済むのではないのでしょうか? 必ずあるページから遷移しなければならないという仕組みの場合は 遷移元のページからセッション情報を保持する事で解消されるのではないでしょうか。
補足
早速回答ありがとう御座いました。 困っている点では直接URLを入力し、海外のPHPを改造するサイトを開く不正なユーザーがおり、レンタルサーバーに大きな負荷をかけているとの報告がレンタルサーバー側よりこの脆弱性を改善するためにサイト内ファイルのみしか読み出せないようよう対応を考えていました。 >>不正な値が入っている場合にのみ弾くのではダメなのですか? 不正な値が入っている場合error.phpを表示させることは可能でしょうか? 私自身PHPに詳しくなくご迷惑お掛けしてしまい申し訳御座いません…。
お礼
ご回答ありがとう御座いました。 システムについては専門業者3人掛かりで製作して頂き連絡したところ脆弱部分の修正をして頂けるとことになりました。 また共有サーバーから専用サーバーにしファイヤーウォールやSSLを駆使して外部からのアクセスを一切遮断する方向で話を進めていこうと思います。 ご回答ありがとう御座いました!