• 締切済み

PHP ファイルupロードのセキュリティ

ただいま ファイルUPロードするための簡単なPHPプログラムをせいさくしています 。 セキュリティの部分とか足らないところがるとは思うのですが、 下のプログラjムをどうやって改造すればいいのでしょうか? たとえば 容量を制限する。 ファイル種類を限定する等  おしえて頂きたいと思っています。 よろしくお願いたします。 <body> <p><?php if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) { if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) { chmod("files/" . $_FILES["upfile"]["name"], 0644); echo $_FILES["upfile"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?></p> </body> </html>

みんなの回答

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>たとえば 容量を制限する。 >ファイル種類を限定する等 「等」って言われても、どこまで掘り下げればいいのやら。自分しか使わないスクリプトなら難しく考えることはないですし(苦笑 保存ファイル名についてはすでに指摘があるので省略するとして、 フォーム側で(MAX_FILE_SIZEを指定して)サイズ制限するとか$_FILES['upfile']['size']でサイズを確認するとか実際にテンポラリファイル($_FILES["upfile"]["tmp_name"])のサイズをfilesize()でチェックする・・といったあたりでしょうか。 「種別を限定」の場合はどういうファイルに限定するのかで異なってきますけど、とりあえずは$_FILES["upfile"]["name"]を元に拡張子を確認しますね(アテにはしない)。拡張子などはファイル名を詐称されている可能性が高いので、たとえば画像ファイル限定ならgetimagesize()で画像種別を取得して判断する必要があります。img要素でそのまま返したいケースなど種別から拡張子を付加しておかないといけませんしね(当然「php経由で返す」ならmimeタイプの方が重要です)。

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.1

基本的なことですが・・・ >move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"]) 保存するファイル名に$_FILES["upfile"]["name"]を使ってはいけません。自分でファイル名を生成してください(charsetがasciiだけという環境ではないですよね)。

29wan
質問者

補足

その基本もわからないんですけどねー

関連するQ&A