- 締切済み
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>
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- shimix
- ベストアンサー率54% (865/1590)
>たとえば 容量を制限する。 >ファイル種類を限定する等 「等」って言われても、どこまで掘り下げればいいのやら。自分しか使わないスクリプトなら難しく考えることはないですし(苦笑 保存ファイル名についてはすでに指摘があるので省略するとして、 フォーム側で(MAX_FILE_SIZEを指定して)サイズ制限するとか$_FILES['upfile']['size']でサイズを確認するとか実際にテンポラリファイル($_FILES["upfile"]["tmp_name"])のサイズをfilesize()でチェックする・・といったあたりでしょうか。 「種別を限定」の場合はどういうファイルに限定するのかで異なってきますけど、とりあえずは$_FILES["upfile"]["name"]を元に拡張子を確認しますね(アテにはしない)。拡張子などはファイル名を詐称されている可能性が高いので、たとえば画像ファイル限定ならgetimagesize()で画像種別を取得して判断する必要があります。img要素でそのまま返したいケースなど種別から拡張子を付加しておかないといけませんしね(当然「php経由で返す」ならmimeタイプの方が重要です)。
- agunuz
- ベストアンサー率65% (288/438)
基本的なことですが・・・ >move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"]) 保存するファイル名に$_FILES["upfile"]["name"]を使ってはいけません。自分でファイル名を生成してください(charsetがasciiだけという環境ではないですよね)。
補足
その基本もわからないんですけどねー