论坛: 网站建设 标题: 删除WWW服务进程中FTP产生的无法删除文件 复制本贴地址    
作者: aoming [aoming]    版主   登录
使用了一下,的确可以起到它的作用。UNIX平台的虚拟主机用户如果遇到这样的情况,不妨试试

作者这样说明的:
-------------------------------------------------------------
在你的CGI空间里,由CGI程序生成的一些数据文件,通过FTP无法删除了。这是因为CGI生成的文件的属主是WWW服务进程的拥有者而不是你。怎么办呢?解铃还需系铃人,还是要通过WWW通过CGI程序去删除。这个小工具就是干这个的,整个程序的核心就是一条UNIX删除文件的命令RM,由sylion编写。本程序仅适用于UNIX类系统。
--------------------------------------------------------------
代码:

#!/usr/bin/perl

##########################################################################################
#                                   文件删除工具 V 0.90                                  #
#                                       作者:sylion                                      #
#                               E-mail:sylion@chinamail.com                              #
#                               站址:http://sylion.yeah.net                              #
##########################################################################################
$main_dir = ".";                #本程序所在的绝对路径
$cgi_url = "./delete.cgi";      #delete.cgi 的URL路径
$pass = "1234";         #密码
###########################################################################################

&parseArgument;

sub parseArgument {
if($ENV{'REQUEST_METHOD'} eq "GET") {
$buffer = $ENV{'QUERY_STRING'};
    } 
else {
        read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
    }

    @pairs = split(/&/,$buffer);
    foreach $pair( @pairs ) {
        ($name,$value)=split(/=/,$pair);
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
unless ($name eq 'comments') {
$value =~ s/<([^>]|\n)*>//g;
}

        $FORM{$name} = $value;
    }
}

if($FORM{'action'} eq ""){
&pass_check;
}
elsif($FORM{'action'} eq "delete_id"){
if($FORM{'passwd'} eq $pass){
$password = $FORM{'passwd'};
&delete_id;
}
else{
&error_pass;
}
}

sub pass_check{
print "Content-type: text/html\n\n";

print <<END;
<html>
<head><title>文件删除工具</title></head>
<body bgcolor="#FFFCFE" text="black" link="#000099" vlink="#000099" alink="red">
<form method=post acton=$cgi_url>
<input type=hidden name=action value="delete_id">
<div align=center>
<table border=0>
<tr>
<td>
要删除的文件名或目录名</td><td><input type=text name=id>(允许使用"../"指定父级目录)</td>
</tr>
<tr>
<td>管理员密码</td><td><input type=password name=passwd></td>
</tr>
<tr><td colspan=2 align=center>
<input type=submit value="确认删除">
</td>
</tr>
</table></div>
</form>
</body>
</html>
END

}


sub delete_id{
if($FORM{'id'} eq ""){
&error_id;
}
if(-e "$main_dir/$FORM{'id'}"){

if($password eq $pass){
$id = $FORM{'id'};

print `rm -rf $main_dir/$id`;

print "Content-type: text/html\n\n";

print <<END;
<HTML>
<HEAD><title>成功!!!</title></HEAD>
<body bgcolor="#FFFCFE" text="black" link="#000099" vlink="#000099" alink="red">
<center>
<font color=red>$id</font> 已经删除<p>
你可以通过FTP查看命令的执行情况。
</center>
</body>
</html>
END
}
else{
&error_pass;
}
}
else{
&error_id;
}
}

sub error_pass{
print "Content-type: text/html\n\n";

print <<END;
<html>
<head><title>密码错误</title></head>
<body bgcolor="#FFFCFE" text="black" link="#000099" vlink="#000099" alink="red">
<center>
密码错误!!!<br>
如果你不是管理员,请马上退出。<br>
</center>
<p align=center>
<a href="javascript:history.go(-1)"><font size=-1>BACK</font></a>
</p>
</body>
</html>
END

}

sub error_id{
print "Content-type: text/html\n\n";

print <<END;
<html>
<head><title>没有指定文件或目录名</title></head>
<body bgcolor="#FFFCFE" text="black" link="#000099" vlink="#000099" alink="red">
<center>
没有指定文件名或目录名!!!<br>
</center>
<p align=center>
<a href="javascript:history.go(-1)"><font size=-1>BACK</font></a>
</p>
</body>
</html>
END
exit;
}
exit;




[此贴被 咖啡╃泡面(aoming) 在 03月19日00时41分 编辑过]

地主 发表时间: 2003-03-19 00:58:41

回复: NetDemon [netdemon]   ADMIN   登录
其实可以手工写一个,像这样,也很方便
代码:

#!/usr/bin/perl
system("tar zcf /usr/home/data.tar.gz /usr/home/htdocs");
system("rm -rf  /usr/home/nofile.txt");
print "Content-type:text/html\n\n";
print "OK"



B1层 发表时间: 02/12 04:18

论坛: 网站建设

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号