请教一下SESSION的问题~~
偶也在做一套系统~~~现在做到权限~~用SESSION~~结果新弹出一个窗口的时候SESSION就传不过去了~~为什么啊?
有的时候就可以~~你做的时候用什么方法呢~~
谢谢哦~~~

解决方案 »

  1.   

    “然后去掉第三行赋值语句。将url带参?a=8,刷新发现$a不变,仍为1。”
    哈哈!你死定了
      

  2.   

    登陆保存session中,保存用户权限位而非用户组,难道不妥?
      

  3.   

    如果你
    <?
    session_start();
    //$_SESSION[a]=1;
    echo $a; //out 1则表示你的register_globals=on
    否则只有echo $_SESSION['a']; //out 1既然你的register_globals=on,那么由此带来的所有安全隐患在你那里都有。所有公开的利用此隐患的攻击都将立即兑现。如果你不说,人家还不一定会去试。所以说“你死定了”
      

  4.   

    1、现在几乎所有的空间服务商,都是这样设置的。这样不会怎样不妥吧。
    2、利用这个设置的攻击,只能是对于某些有安全逻辑bug的程序起作用吧?比如未定义缺省值。
    3、登陆保存session中的信息,保存用户权限位而非用户组,妥否?
    4、对这种设置,怎样防范安全隐患?
      

  5.   

    胡说!几乎没有空间服务商,是这样设置的!给你一个节选,自己看看有无道理!
    让我们考虑一下处理文件上载的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”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。 我在前面已经说了,新版本的PHP使用HTTP_POST_FILES[]来决定上载文件,同时也提供了很多函数来解决这个问题,例如有一个函数用来判断某个文件是不是实际上载的文件。这些函数很好的解决了这个问题,但是实际上肯定有很多PHP程序仍然使用旧的方法,很容易受到这种攻击。 作为文件上载的攻击方法的一个变种,我们看一下下面的一段代码: <?php 
     if (file_exists($theme)) // Checks the file exists on the local system (no remote files) 
    include("$theme"); 
    ?> 如果攻击者可以控制“$theme”的话,很显然它可以利用“$theme”来读取远程系统上的任何文件。攻击者的最终目标是在远程服务器上执行任意指令,但是他无法使用远程文件,因此,他必须得在远程服务器上创建一个PHP文件。这乍看起来好象是不可能的,但是文件上载帮了我们这个忙,如果攻击者先在本地机器上创建一个包含PHP代码的文件,然后创建一个包含名为“theme”的文件域的表单,最后用这个表单通过文件上载把创建的包含PHP代码的文件提交给上面的代码,PHP就会把攻击者提交的文件保存起来,并把“$theme”的值设置为攻击者提交的文件,这样file_exists()函数会检查通过,攻击者的代码也将执行。 获得执行任意指令的能力之后,攻击者显然想提升权限或者是扩大战果,而这又需要一些服务器上没有的工具集,而文件上载又一次帮了我们这个忙。攻击者可以使用文件上载功能上载工具,把她们存在服务器上,然后利用他们执行指令的能力,使用chmod()改变文件的权限,然后执行。例如:攻击者可以绕过防火墙或IDS上载一个本地root攻击程序,然后执行,这样就获得了root权限。 
      

  6.   

    优先级是按照PHP.INI里的GPCS顺序吧?
      

  7.   

    to  surfchen(冲浪):
    设置优先级,应该可以避免这种$_POST被$_GET变量替换的问题。
    你们直接用$_POST[xx]的形式在程序里面使用而不采用简写方式吗?to 唠叨:
    文件上传方面,又学到了一个很重要的内容。万谢。看来以后的确只能用$_FILE来处理上传文件稳妥。但是对于$_POST和$_GET就不存在这种问题吧?
      

  8.   

    我一般会根据情况写一句
    $xx=$_POST['xx'];
      

  9.   

    to 唠叨:
    文件上传的第一个攻击方法,意思就是说可以显示出任何在服务器端的文件。
    它的变种的实现可能不大,因为上传的文件通常放在upload文件夹下,而程序include的文件,不可能在这个文件夹下面。所以应该不存在这种问题。
      

  10.   

    你们直接用$_POST[xx]的形式在程序里面使用而不采用简写方式吗?我从不简写,这样在register_global=on的主机上 可能会出现问题。
    即使是再赋一次值,也不要直接拿来就用。

    $hello = $_POST['hello'];
    因为有可能你程序里有一个$hello变量正好与$_POST里的数组值重名,
    如果你直接使用那么必然会出现问题。
      

  11.   

    回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:120 

    $hello = $_POST['hello'];
    因为有可能你程序里有一个$hello变量正好与$_POST里的数组值重名,
    如果你直接使用那么必然会出现问题。
    -----------------------------------------------------------
    请问这句话是什么意思呢?
      

  12.   

    我进行简写一般是在进行字符处理的时候虽然现在$_POST['xx']之类的变量在脚本里是可以修改值的(变量嘛)
    但是我怕突然PHP的开发组头脑一热!完了...他们把$_POST['xx']这种规定为在脚本里不可修改..然后,我在程序中的这么一段代码就废了
    $_POST['xx']=str_replace('a','b',$_POST['xx'])----虽然不太可能,虽然杞人忧天了点,但是,嘿嘿,我就是有点这么保守..
      

  13.   

    回复人: spacet(空格t) ( ) 信誉:96  2004-12-22 01:10:00  得分: 0  
     
     
       回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:120 

    $hello = $_POST['hello'];
    因为有可能你程序里有一个$hello变量正好与$_POST里的数组值重名,
    如果你直接使用那么必然会出现问题。
    -----------------------------------------------------------
    请问这句话是什么意思呢?
      
     
    这是本身程序逻辑错误,和全局变量是否on无关。如果是on而你却有变量名的重复,那个变量都可能造成程序错误了。
      

  14.   

    这是本身程序逻辑错误,我同时声明两个变量$hello和 $testArray['hello'];
    这不算程序逻辑错误吧? 只是因为$_POST的特殊身份才导致上面的结果.
      

  15.   

    zairwolfi(君子兰)  好像早就有星了嘛,我记错了唠叨 老大,说的那个安全隐患以前就知道了,但是前提是系统要有上传的文件功能的吧
    不过还是研究研究,我试试看
      

  16.   

    to  ice_berg16(寻梦的稻草人) ( ):
    我用过几个服务商的空间,都是on的,所以都不知道不on的感觉了。现在做程序,基本不考虑这样的变量。都是在开头extract,然后内容直接用。to 浪子快刀:
    不好坚持啊。现在只有每天增加的可怜10分,问问题都不够。前阵子去水版捣乱,总信誉已经只有17了,赫赫。to patchclass(黑翼) :
    你说那个隐患是存在的么?我总觉得不会有谁让程序include一个上传文件夹的文件吧?
    ps:我以前的星星那是n颗,不过只是签名档,赫赫。
      

  17.   


    回复人: ice_berg16(寻梦的稻草人) ( ) 信誉:120 
    我同时声明两个变量$hello和 $testArray['hello'];
    这不算程序逻辑错误吧? 只是因为$_POST的特殊身份才导致上面的结果.
    -----------------------------------------------------------------
    原来是这个意思,我还想了半天呢
      

  18.   

    To xuzuning(唠叨) :/etc/passwd 文件里又不会存明码的,拿到有什么用?数据库的配置文件才有用
      

  19.   

    一般来说register_globals=on是无问题的。都用2~3年,访问者无数也没发生多大的漏洞......主要看使用者是谁,挖哈哈~~~~~~~~~~~~~~~~~~
      

  20.   

    比如你是用
    if($sessUsername!=''){}
    这样的话就有大问题了