-1

test.php中有函数a和函数b,会被$_GET中的"act"参数调用,如果没有"act"的值则有默认值

<?php
   if(isset($_GET['act'])&&$_GET['act']){
     $act=$_GET['act'];
   }else{
     $act='a';
   }
   function a(){
    echo('this is a');      
   }
   function b(){
        echo('this is b');
  }
   $act();
?>

如果我运行下面的代码,它将调用 test.php 中的函数 a 和函数 b,

<?php
   include ("test.php");
   b();
?>

它怎么能只调用函数b?我不想更改“act”的默认值,因为它将被其他系统使用谢谢

4

2 回答 2

2

你告诉它调用两个函数。当您包含(“test.php”)时,最后的行调用函数a:

$act();

然后在您的其他源文件中,您显式调用 b():

b();

您需要删除其中一个调用。

顺便说一句,你正在做的事情非常危险,没有清理你的输入。举个简单的例子,假设您的第二个源文件名为 second.php,并且用户键入以下 url:

http://yourserver.com/second.php?act=phpinfo

他们会打印出您的 Apache 安装数据,包括您已加载的所有模块等。他们可能会做一些更危险的事情,而我没有考虑即兴发挥。您需要一个明确的法律行动白名单,您可以实际检查和验证。

于 2012-12-29T01:42:46.970 回答
1

您可以在包含的文件中定义一些变量/常量,当它存在时,不要调用$act()

<?php
   if(isset($_GET['act'])
       &&
      $_GET['act'] 
       && 
      in_array($_GET['act'],array('a','b'))
   ){
     $act=$_GET['act'];
   }else{
     $act='a';
   }
   function a(){
    echo('this is a');      
   }
   function b(){
        echo('this is b');
  }
   if(!defined('FOO')){
     $act();
   }
?>

…………

<?php
   if(!defined('FOO')){
     define('FOO',true);
   }

   include ("test.php");
   b();
?>
于 2012-12-29T02:11:50.140 回答