2021年04月07日に初出の投稿

Last modified: 2021-04-07

ウェブのプログラミングで、コントローラやモデル(ビューはどうでもいい)の実体となるコードを http/https でアクセスできるディレクトリとは別のパスなり上位の階層に置いてインクルードするなんてことは、かなり初歩的なことだと思うんだよね。実際、殆どのフレームワークがスケルトンとして展開するディレクトリ構造を見ると、フロント・コントローラだけが DocumentRoot の直下にあって、そこではフレームワークの本体として動くためのヘッダーを auto loading するだけという組み方をしている。こんなのは、もうわざわざ「デザイン・パターン」などと称して取捨選択の余地があるかのようなことを言う必要すらなく、やって当たり前のことだという理解を普及させた方がいいと思う。

実際、先日も京都のデータセンターまで行って実装してきたアプリケーションの件でも起きたことだが、クライアントの公開サーバは仕様がよく分からない場合が多くて、事前にもらう資料は簡単なものばかりだし、現地へ行ったとしても受託作業者のアカウントで httpd.conf や php.ini の中身を確認できる権限があるとは限らない。よって、ありえるリスクを洗い出して現地で試して確認するか、クライアント側の技術者に協力してもらえるなら事前に質問表へ回答していただくのがよい。ただ、それでも回答通りの挙動や設定ではないこともある(今回の京都でやった案件でも DocumntRoot のパスが事前に通知されていた内容とは違っていた)ため、結局は現地で自分で確認しないといけないのは同じである。

こういう事情では、たとえば Apache の .htaccess が無効になっていることがあるため、HTML ファイルに埋め込んだ PHP や SSI が動くとは限らない。よって、動かない場合に何らかの印がページに出てくるような組み方をしておかないと、動いているのか動いていないのかはページのソースを見ないと分からないという話になる(プロダクション・サーバでは PHP だと ini_set( 'display_errors', FALSE ); にしていることが多いので、エラーは出ない場合が多い)。例えば、

<?php if ( ! TRUE ) { ?>FAILS<?php } ?>

としておけば、PHP が動いていないと "FAILS" と表示される。で、なんでフレームワークだのサーバの仕様だのという話をしているかと言えば、.htaccess が無効であることに気づかないで HTML ファイルに PHP を埋め込んでいたりすると、PHP のコードが丸見えのまま放置することになるからだ。動いていないことに気づかないということが起きうる(特に静的なページに埋め込むと、動いていなくてもページの表示には関係がなかったりするので、気づきにくい)。そして、そういう場合でも処理の中身が漏洩しないように、処理内容の実体を別のディレクトリに置いてインクルードすれば安全だという話に繋がるわけである。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook