0

我只是想确保我做对了。这是一个简单的上传类。我需要更改下面的代码以使用变量名称(Joomla 用户 ID 并保留扩展名)重命名实际的图像文件。很容易获取登录的用户 ID。所以我在上传之前的图像文件名将是用户拥有 (usersimagename.jpg) 并将其更改为由 joomla 的用户变量填充的数字 userid.ext,例如 (62.png)。

<?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

代码本身在操作上很好,但在逻辑上是一场噩梦。您允许用户为最终存储位置指定路径和文件名。考虑如果恶意用户进入您的网站会发生什么。他们可以轻松地替换您的服务器上您的网络服务器的用户 ID 有权访问的任何文件。

例如

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

或者

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

虽然这些只是令人震惊的价值示例,并且不太可能被您的网络服务器修改,但这是一个示例,说明您的代码将多么容易让某人完全 pwn 您的服务器。

于 2012-08-08T19:05:11.120 回答