わかりました、検索しましたが、これに近いものは見つかりませんでしたので、ここに行きます...
/home/sites/example.com/data など、www、htdocs、public_html などの外部のディレクトリとサブディレクトリからファイルを提供する PHP 5.3+ プロキシ スクリプトを作成しています。
これは Moodle プラグイン モジュール用なので、Moodle コードに精通している場合は素晴らしいです。そうでない場合は、できる限り注釈を付けました。これまでのところ、すべて期待どおりに機能していますが、まだテストを実行していません。
質問: これはどのくらい安全ですか? 私の主な関心事は、ユーザーが指定されたディレクトリの外にアクセスすることです。明らかなセキュリティ上の欠陥が見られる場合は、お知らせください。
スクリプト:
require_once('../../config.php'); // conatains $CFG object
require_once('../../lib/filelib.php'); // contains mimeinfo() and send_file() definitions
// Don't use Moodle required_param() to avoid sending any HTML messages to Flash apps
require_login(); // Users must be logged in to access files
global $CFG;
$swf_relative_path = get_file_argument(); // gets the appended URL e.g. /dir/subdir/file.jpg
$swf_ok = false;
if(strrpos($swf_relative_path,'.') > strlen($swf_relative_path) - 6) {
// Strip out special characters, extra slashes, and parent directory stuff
$swf_disallowed = array('../','\'','\"',':','{','}','*','&','=','!','?','\\','//','///');
$swf_replace = array('','','','','','','','','','','','','/','/');
$swf_relative_path = str_replace($swf_disallowed,$swf_replace,$swf_relative_path);
$swf_full_path = $CFG->dataroot.$CFG->swf_content_dir.$swf_relative_path;
if(file_exists($swf_full_path) && is_readable($swf_full_path)) {
$swf_path_info = pathinfo($swf_full_path);
$swf_mime_type = mimeinfo('type', $swf_path_info['basename']);
send_file($swf_full_path,$swf_path_info['basename'],'default',0,false,false,$swf_mime_type,false);
exit;
}
}
header('HTTP/1.0 404 Not Found'); // Send back a 404 so that apps don't wait for a timeout
exit('404 Error: File not found'); // Pure text output - Flash app friendly
前もって感謝します!:)