私はフォルダにPDFやJPG、JPEGファイルのいずれかをアップロードしようとしていますと、以下のようにコードは次のとおりです。PHPファイルのアップロードが常にファイルをアップロードする場合でも、エラー
//Get the uploaded file information
if(!$_FILES['medreport']['error'])
{
$medreport = basename($_FILES['medreport']['name']);
$medreport_extn = substr($medreport, strrpos($medreport, '.') + 1);//get the file extension of the file
$medreport_size = $_FILES["medreport"]["size"]/1024;//size in KBs
$tmp_path = $_FILES["medreport"]["tmp_name"];
$report_folder = "../reports/";
//Settings
$max_allowed_file_size = 200; // size in KB
$allowed_extensions = array("jpg", "jpeg", "pdf");
//Validations
}
if($medreport_size > $max_allowed_file_size)
{
$error[] = "Size of the report file should be less than $max_allowed_file_size KB";
}
//Validate the file extension
$allowed_ext = false;
for($i=0; $i<sizeof($allowed_extensions); $i++)
{
if(strcasecmp($allowed_extensions[$i],$medreport_extn) == 0)
{
$allowed_ext = true;
}
}
if(!$allowed_ext)
{
$error[] = "The uploaded report file is not a supported file type. "."Only pdf, jpg and jpeg report file types are supported. ";
}
//replace filename with unixtime
$unixtime =time();
$medreport = $unixtime.mt_rand(0,9).'.'.$medreport_extn;
$report_path = $report_folder . $medreport;
if(is_uploaded_file($tmp_path))
{
if(!copy($tmp_path,$report_path))
{
$error[] = 'Error while copying the uploaded report file';
}
}
正しい拡張子を持つファイルをアップロードしようとしているときと、 size私はそれをアップロードすることができます。
しかし、大きすぎたり不正な形式のファイルをアップロードしようとすると、エラーメッセージが表示されますが、ファイルは常にフォルダにアップロードされます。
どうしてですか?どうしたら、私のコードに間違いがありますか?
方法は、私はそれが十分に安全ですか?
がSetHandler none
SetHandler default-handler
Options -ExecCGI
php_flag engine off
ファイルは常にが私を混乱さアップロード:WWWデータおよび権限によって所有されているフォルダは、私は次のように実行可能ファイルを防ぐために、ファイルアップロードフォルダにすぎ.htaccessファイルを持っている755です。
おそらく、ディレクトリは、権限マスク(75気圧)上の最初の2つの数字に相当する 'www-data www-data'(所有者とグループ)によって所有されています。あなたは* guest *ユーザがWebサーバ上の何にでもパーミッションを必要とすることはまずありませんので、ハイライトは強調しています。セキュリティリスクは実際にはWebサーバーが読み書きできるディレクトリを持つことにありますが、.htaccessファイルでそのディレクトリを軽減することになります。 – CD001
PHPはサーバー上で動作するので、ファイルが大きすぎるかどうか、またはファイルがサーバー上の*になるまで、許可されていないファイルの種類を知ることはできません* - そう、 limitは 'upload_max_filesize'や' post_max_size'で設定されます。この場合、アップロードは中止されます。 – CD001
*他人が何を意味するかによって異なります* httpを介して提供されるすべてのファイルはApacheによって送信されます - これはdir(したがってファイル)の所有者です。 SFTPでログインする人はすべて 'www-data'グループに入っていなければなりません。基本的に、* guest *ユーザー(つまり、ゲストに* guest *としてログインしているユーザー)の権限をWebサーバー上で提供する必要がある場合はありません。 – CD001