任意のファイルを読み込み、その場に実装するWordPressショートコード

Ads

3連休ですがいつも通り更新です。暇なものでして。今日はWordPressの小ネタです。一見凄く使えそうですが、使い方に気を付けたほうがいい、みたいなTips。任意のファイルを外部だろうが内部だろうが読み込むショートコードです。

休日ですし、ちょっとネタっぽい内容です。htmlでもxmlでもcssでも、指定したファイル内の文字列を取得してその場に実装します。

コード

以下のコードをfunctions.phpに含めます

function show_file_func( $atts ) {
  extract( shortcode_atts( array(
    'file' => ''
  ), $atts ) );
 
  if ($file!='')
    return @file_get_contents($file);
}
add_shortcode( 'show_file', 'show_file_func' );

で、ショートコードを書く。

[show_file file=”example.html”]

これで、example.htmlというファイル内の文字列がその場に読み込まれます。

[note]これは文字列を書き出しますので、PHPファイルを読み込みたい場合は別の方法になります。↓
プラグインを使わず投稿記事や固定ページの好きな場所に任意のPHPファイルを挿入、実行できるようにする[/note]

外部ファイルでも読み込めます。

[show_file file=”http://www.yahoo.co.jp/”]

Yahoo!を読み込んでみました。これがセキュリティの弱いサイトならテーマ少し工夫すればフィッシング詐欺サイト量産できちゃいますね。例えばセキュリティの甘いサイトのコンタクトフォームなどを読み込んで送信先を変え・・とかでしょうか。

セキュリティの話

file_get_contents()という関数は指定したファイルの文字列を全て取得する関数で、それをショートコードにしたものが上記のコードで、このように外部ファイルにも対応しています。

じゃあ、当然悪用されるじゃないかと言うと、そうでもなくて逆に読み込んだ側のログを相手に取られる恐れもあります。ハニーポット的な・・・分かりませんけどw

この関数を使うにはphp.iniでallow_url_fopenがonである必要があるのですが、allow_url_fopenがonの状態は外部ファイルが実行される事を意味しますのでセキュリティ上、安全とは言えない状態です。多くのレンタルサーバーではセキュリティ上の問題から、基本的にoffになっているようです。セキュリティの話に関してはPHPのセキュリティを高めるための個人的メモという記事が分かりやすいのでご参照下さい。

file_get_contentsが良い悪いではなく、技術は気をつけて使いたいですね、というお話でした。以下を参照しました。

via:Cats Who Code