echo "  <td align=\"center\" nowrap valign=\"top\"><a href=\"?downfile=".
urlencode($filepath)."\">下载</a>这段代码是提供一个链接,如果用户点击的话,就提交$_GET['downfile']变量按$filepath下载文件。的确是要有一个$_GET['downfile'],否则没法接收。
$filepath必须是一个完整的指向文件的路径,而上面的代码并没有提供相关的检查函数,这是是有漏洞的。
而且是直接提交$_GET['downfile']变量,连$filepath都指明了,这样的网站安全系数是相当低的。劝楼主不要用这和代码。

解决方案 »

  1.   

    对不起,我刚才说错了,上面的代码是有一个file_exist,可以用来检查文件。
    但是在PHP.NET上有这一句:
    file_exists
    (PHP 3, PHP 4, PHP 5)file_exists -- 检查文件或目录是否存在
    说明
    bool file_exists ( string filename )
    如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE。file_exist同样也可以检测目录,如果用户把$filepath设置成一个目录的路径,同样可以绕过检查。
      

  2.   

    谢谢
    问题是
    $downfile变量就是$_GET['downfile']吗?一般的,我们都要$downfile=$_GET['downfile']后,$dwonfile才会有值啊?!安全问题就不管了,我才刚学,能看懂就不错了^_^
      

  3.   

    我刚才说得省略了一点。
    $downfile不是$_GET['downfile']
    实际上在代码中应该加一句:$downfile = $_GET['downfile'];
      

  4.   

    楼主才刚学就能看懂这些就很了不起了,我记得我刚学的时候我连$_GET都不会用。
      

  5.   

    但是这段代码可以执行。
    而且我用的是php4.32
      

  6.   

    谢谢夸奖^_^
    你学了多久了??为什么这里不要进行$downfile = $_GET['downfile']也可以用$downfile??
      

  7.   

    从我的技术水平来讲不用$downfile = $_GET['downfile']是不行的。
    你的代码应该有一个地方有这行代码的。
      

  8.   

    总之调用方法有几种,不一定是用$_GET。
      

  9.   

    你看看他的脚本里面有没有包含别人文件
    在别的文件里面应该有类似于
    foreach($_GET as $key=$value){
       $$key=$_GET['$key'];
    }
    这样的语句
    这样也可以达到你在脚本中不使用$_GET直接可以用$downfile访问到由$_GET提交上来的数据
    相当于auto_register