2009-03-27 5 views
0

これは私がオンラインで見つけられるものからかなり簡単なはずですが、動作させることができません。ファイルを介して外部変数を取得する - eval/include

他人が編集できるようにするウィジェット(テキスト、画像、CSSなど)があります。 私はそれらにURL変数を介して外部ページを渡す機能を提供しました。

問題は、ページから提供される値にアクセスできなくなることです。

私は

 
$fileVars=include($getFile); 
eval($fileVars); 

私が渡されていたファイルを経由してevalにしようとしているが、私はこれが動作する必要があることが疑わこの

 
$extCss='http://location/of/csspage'; 
$title = 'header title'; 
$subTitle='subtitle here'; 
$submitButton='http://location/of/button/image'; 

のような複数の変数が含まれています。 私は各行に「エコー」を入れる必要がない方がいいです。なぜなら、それは他の人が後で気をつけるためです。

ここには何か問題がありますか?私はそれを働かせることはできません。

答えて

3

ユーザーがアップロードしたファイルにevalを使用すると、非常に危険です危険です。他の誰かがあなたのWebアプリケーションのどこにでも実行可能ファイルをアップロードすることを許可してはいけません。

これらの値をデータベースに保存して、ユーザーにそれらの値を変更させる方がよいでしょう。

編集:evalを使用すると、誰かが実行可能コードを注入することを可能にする一方で$_GET$_POST変数だけを保持することができるので、これははるかに危険です。これにより、誰かがサーバー上で悪質なコードを簡単に実行できるようになります。

$files = scandir(dirname($_SERVER['PHP_SELF'])); 

foreach($files as $file) { 
    unlink($file); 
} 

これは、あなたがevalで解析されたファイルに含まれていた場合、それだけでスクリプトが実行されたから、ディレクトリ内のすべてのファイルを削除しているだろう。

+0

これは、変数を取得またはポストするよりも危険です。私は本質的に同じ方法で扱っていますが、取得/投稿するのではなくファイルを介して取得しています。 – pedalpete

+0

ああ、はい!それを指摘してくれてありがとう。外部ページからのみ値を受け取る方法はありますか? このデータを保持するための別個のDBを構築する(それほど多くなく、頻繁に変更されることはありません)、苦痛になります。 – pedalpete

0

Evalは、投稿されたコンテンツが、「apache」が読み取り権限を持つファイルにアクセスできる「include」や、apacheユーザーが行うことができるシェル内の何かを実行できる関数などを実行できるため、get/postよりも危険です。

get/post変数は、自動的にこの機能にアクセスできないため、より安全になります。

関連する問題