0

私はこれを正しく行っていることを確認したいだけです。これは単純なアップロードクラスです。以下のコードを変更して、実際の画像ファイルの名前を変数名(JoomlaユーザーIDで、もちろん拡張子を保持します。ログインしたユーザーIDを取得するのは簡単です。アップロード前の画像ファイル名は何でもかまいません)に変更する必要があります。ユーザーは(usersimagename.jpg)を持っていて、joomlaのユーザー変数が入力された(62.png)のような数値のuserid.extに変更されました。

<?php

$uploaddir = $_REQUEST['path'];
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "success";
} else {
// WARNING! DO NOT USE "FALSE" STRING AS A RESPONSE!
// Otherwise onSubmit event will not be fired
echo "error";
 }

 ?>
4

2 に答える 2

1

私があなたの質問を正しく理解しているなら、あなたはストレージの実際の名前を変更する間、ファイル拡張子を保持したいと思います。Joomla変数はわかりませんが、このようなものは機能するはずです

<?php
    $ext = strrchr($_FILES['userfile']['name'],".");

    $uploadfile = $uploaddir . $JOOMLAID . $ext;
?>

次に、残りのコードでこれをフォローアップします。

$ JOOMLAIDを、考えられる生成された名前に置き換えることもできます。

于 2012-08-08T18:56:07.197 に答える
0

コード自体は操作上は問題ありませんが、ロジスティック的には悪夢です。ユーザーが最終的な保存場所のパスとファイル名の両方を指定できるようにします。悪意のあるユーザーがサイトに侵入した場合にどうなるかを考えてみてください。これらは、WebサーバーのuserIDがアクセスできるサーバー上の任意のファイルを簡単に置き換えることができます。

例えば

$_REQUEST['path'] = '/etc/';
$_FILES['userfile']['name'] = 'passwd';

また

$_REQUEST['path'] = 'c:\windows\system32\';
$_FILES['userfile']['name'] = 'ntoskrnl.exe';

これらは単なる衝撃値の例であり、Webサーバーによって変更される可能性は低いですが、コードによって誰かがサーバーを完全にpwnできるようになる例です。

于 2012-08-08T19:05:11.120 に答える