当前位置:  编程技术>php
本页文章导读:
    ▪多文件上载系统完整版       <?php //多文件上载系统完整版 //功能强大,可任意控制上载文件数,是否覆盖 include("../include/common.inc"); $title = "多个文件的上载程序"; include("../include/header.inc"); //定义允许上载文件的数目 d.........
    ▪php中文件上传的安全问题       可以读/etc/passwd!这段。。[文件上载] PHP自动支持基于RFC 1867的文件上载,我们看下面的例子: <FORM METHOD="POST" ENCTYPE="multipart/form-data"> <INPUT TYPE="FILE" NAME="hello"> <I.........
    ▪ftp类(example.php)       flush();$ftp_ini_datei         = $argv[1];require ('./ftp_class.php');require ($ftp_ini_datei);echo "\nCronjob started : ";echo date("d.m.Y  - H:i:s");echo "\n";$newftp         = new myftp;if(!$anonymous).........

[1]多文件上载系统完整版
    来源: 互联网  发布时间: 2013-11-30
<?php
//多文件上载系统完整版
//功能强大,可任意控制上载文件数,是否覆盖

include("../include/common.inc");
$title = "多个文件的上载程序";
include("../include/header.inc");

//定义允许上载文件的数目

define("UPLOAD_NO", 10);

echo("<p align='center'><font size='4' color='#000080'>欢迎您!<br>一次可以最多上载".UPLOAD_NO."个文件<br><HR>n");
if($REQUEST_METHOD!="POST"){
    echo("<form enctype="multipart/form-data" method=post>n");
    echo("<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="3000000">n");

    for($i=1;$i<=UPLOAD_NO;$i++){
        echo("<input type=file name=infile$i>   ");

        if($i%2==0)
        echo("<br>n");
    }

    echo("<br><br><input type="checkbox" name="overload" value="ON"></font> <font color='#ff0000'>是否覆盖已经存在的文件?</font>");
    echo("<br><br><input type=submit value=上载></form>n");
}
else{
    //处理上载
    $noinput = true;
    for($i=1;$noinput&&($i<=UPLOAD_NO);$i++){
         if(${"infile".$i}!="none") $noinput = false;
    }
    if($noinput){
        echo("<font size='4' color='#000080'>没有选定的文件,返回重试</font>");
        exit();
    }
    echo("<p align='center'><font size='4' color='#000080'>您选中的文件已经成功地上载到服务器的临时目录!</font><br>");         
    echo("<table border='1' width='84%' height='52' bordercolorlight='#008080' bordercolordark='#008080'>
        <tr>
            <td width='14%' bgcolor='#008000' height='21'><font color='#FFFFFF'>文件号</font></td>
            <td width='52%' bgcolor='#008000' height='21'><font color='#FFFFFF'>文件名称</font></td>
            <td width='34%' bgcolor='#008000' height='21'><font color='#FFFFFF'>文件大小</font></td>
        </tr>");

    for($i=1;$i<=UPLOAD_NO;$i++){
        $just=${"infile".$i."_size"};
        $fp_size[i] = $just;

        if($overload!=ON){
            if(file_exists(AddSlashes(dirname($PATH_TRANSLATED))."\upload\".${"infile".$i."_name"}))
                echo "<font size='4' color='#ff0000'>您上载的文件<font color='#000000'>".${"infile".$i."_name"}."</font>已经存在,该文件拷贝失败!</font><br>";
            else{
                if(${"infile".$i}!="none"&©(${"infile".$i},AddSlashes(dirname($PATH_TRANSLATED))."/upload/".${"infile".$i."_name"})&&unlink(${"infile".$i})){
                $str = ${"infile".$i."_name"};
                echo("<tr>
                    <td width='14%' height='19'>$i</td>
                    <td width='52%' height='19'>$str</td>
                    <td width='34%' height='19'>$fp_size[i]</td>
                    </tr>");
                  }
            }
        }
        else{
            if(${"infile".$i}!="none"&©(${"infile".$i},AddSlashes(dirname($PATH_TRANSLATED))."upload".${"infile".$i."_name"})&&unlink(${"infile".$i})){
                $str = ${"infile".$i."_name"};
                echo("<tr>
                    <td width='14%' height='19'>$i</td>
                    <td width='52%' height='19'>$str</td>
                    <td width='34%' height='19'>$fp_size[i]</td>
                    </tr>");
            }
        }

    }
    echo "</table>";             
}

include("../include/footer.inc");

?>  


    
[2]php中文件上传的安全问题
    来源: 互联网  发布时间: 2013-11-30

可以读/etc/passwd!

这段。。

[文件上载]
PHP自动支持基于RFC 1867的文件上载,我们看下面的例子:

<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="hello">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>

上面的代码让用户从本地机器选择一个文件,当点击提交后,文件就会被上载到服务器。这显然是很有用的功能,但是PHP的响应方式使这项功能变的不安全。当PHP第一次接到这种请求,甚至在它开始解析被调用的PHP代码之前,它会先接受远程用户的文件,检查文件的长度是否超过“$MAX_FILE_SIZE variable”定义的值,如果通过这些测试的话,文件就会被存在本地的一个临时目录中。

因此,攻击者可以发送任意文件给运行PHP的主机,在PHP程序还没有决定是否接受文件上载时,文件已经被存在服务器上了。

这里我就不讨论利用文件上载来对服务器进行DOS攻击的可能性了。

让我们考虑一下处理文件上载的PHP程序,正如我们上面说的,文件被接收并且存在服务器上(位置是在配置文件中指定的,一般是/tmp),扩展名一般是随机的,类似“phpxXuoXG”的形式。PHP程序需要上载文件的信息以便处理它,这可以通过两种方式,一种方式是在PHP 3中已经使用的,另一种是在我们对以前的方法提出安全公告后引入的。

但是,我们可以肯定的说,问题还是存在的,大多数PHP程序还是使用老的方式来处理上载文件。PHP设置了四个全局变量来描述上载文件,比如说上面的例子:

$hello = Filename on local machine (e.g "/tmp/phpxXuoXG")
$hello_size = Size in bytes of file (e.g 1024)
$hello_name = The original name of the file on the remote system (e.g "c:\\temp\\hello.txt")
$hello_type = Mime type of uploaded file (e.g "text/plain")

然后PHP程序开始处理根据“$hello”指定的文件,问题在于“$hello”不一定是一个PHP设置的变量,任何远程用户都可以指定它。如果我们使用下面的方式:

http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt

就导致了下面的PHP全局变量(当然POST方式也可以(甚至是Cookie)):

$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"

上面的表单数据正好满足了PHP程序所期望的变量,但是这时PHP程序不再处理上载的文件,而是处理“/etc/passwd”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。 

 

    
[3]ftp类(example.php)
    来源: 互联网  发布时间: 2013-11-30

flush();

$ftp_ini_datei         = $argv[1];

require ('./ftp_class.php');
require ($ftp_ini_datei);

echo "\nCronjob started : ";
echo date("d.m.Y  - H:i:s");
echo "\n";

$newftp         = new myftp;

if(!$anonymous){
    $result     = $newftp->connect($host, $user, $password);
}else{
    $result        = $newftp->connect($host, "anonymous", "mymail@somewhere.com");
}

if (!$result){
    $mydir         = $newftp->changedir($remote_dir);
    $mydir        = $newftp->getdir();
    $merkold_dir    = getcwd();
    chdir($local_dir);
    $mylist     = Array();
    $mylist     = $newftp->get_file_list($mydir);



    for ($i=0; $i < sizeof($mylist); $i++)
    {
        $result = $newftp->get_file($mylist[$i], $mymode, $delete);
    }

    $result     = $newftp->ftp_bye();

}else{

    echo "----------------------------------\n";
    echo "no connection established :(      \n";
    echo "----------------------------------\n";

}

echo "\n\nCronjob stopped : ";
echo date("d.m.Y - H:i:s");
echo "\n";
?>

    
最新技术文章:
▪PHP函数microtime()时间戳的定义与用法
▪PHP单一入口之apache配置内容
▪PHP数组排序方法总结(收藏)
▪php数组排序方法大全(脚本学堂整理奉献)
▪php数组排序的几个函数(附实例)
▪php二维数组排序(实例)
▪php根据键值对二维数组排序的小例子
▪php验证码(附截图)
Web服务器/前端 iis7站长之家
▪php获取数组长度的方法举例
▪判断php数组维度(php数组长度)的方法
▪php获取图片的exif信息的示例代码
▪PHP 数组key长度对性能的影响实例分析
▪php函数指定默认值的方法示例
▪php提交表单到当前页面、提交表单后页面重定...
▪php四舍五入的三种实现方法
▪php获得数组长度(元素个数)的方法
▪php日期函数的简单示例代码
▪php数学函数的简单示例代码
▪php字符串函数的简单示例代码
▪php文件下载代码(多浏览器兼容、支持中文文...
▪php实现文件下载、支持中文文件名的示例代码...
▪php文件下载(防止中文文件名乱码)的示例代码
▪解决PHP文件下载时中文文件名乱码的问题
▪php数组去重(一维、二维数组去重)的简单示例
▪php小数点后取两位的三种实现方法
▪php Redis 队列服务的简单示例
▪PHP导出excel时数字变为科学计数的解决方法
▪PHP数组根据值获取Key的简单示例
▪php数组去重的函数代码示例
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3