web-dev-qa-db-ja.com

テーマファイルへの直接アクセスを制限する価値はありますか?

私は時々テーマの次のスニペットに出くわしました:

if ( ! defined('ABSPATH')) exit('restricted access');

これは、テーマ内の(すべての)PHPファイルの先頭にあり、悪意のあるソースによるファイルへの直接アクセスを防ぐためのものです。

私はこれがTwenty TenやElevenに含まれていないことを知っています、そしてそれが公式のWordPressドキュメントで推奨されているのを見たことがありません。それは私にとっては良い考えのように思えますが、私はそれを判断するのに十分なセキュリティについても知らず、グーグルではあまり見つけることができません。

これは私のカスタムテーマに含めるべきものですか?もしそうなら、それはすべてのPHPファイルに含まれるべきですか、それともほんのいくつかに含まれるべきですか?

31
mrwweb

通常は必要ありません。しかし…少なくとも1つのEdgeケースがあります。

  • テーマファイルがテンプレート part の場合、
  • および 呼び出し側コンテキスト(親ファイル)のグローバル変数を使用しています。
  • および register_globalson
  • セキュリティチェックなしでこれらの変数を使用しています…

…攻撃者はこのファイルを呼び出し、不足している変数をGETまたはPOSTで設定し、それらをテーマファイルに表示させることができます。それからセキュリティ問題です。

ですから…最良の選択肢はあなたの例のようなコンテキストチェックではなく、良いコードです。グローバル変数を避け、印刷する前にその内容をチェックしてください。

他の誰かが私のコードを使ってセキュリティを気にせずにそれを変更すると思うとき、私はコンテキストチェックを追加することがあります。痛いことはありません。

26
fuxia