当前位置: 编程技术>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");
?>
//多文件上载系统完整版
//功能强大,可任意控制上载文件数,是否覆盖
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";
?>
最新技术文章: