http.responseText返回名为的PHP函数的名称

时间:2012-07-19 00:07:47

标签: php mysql ajax

我正在使用AJAX来调用PHP中的函数。它返回我的数据很好,但它继续将函数名称放在returnText的开头。

我的Javascript / ajax

function getfirst() {
    var myphp=document.getElementById('myphp').value ;
    http=createRequestObject();
    url= tablename + '.php?filename=' + tablename;
    url= url + '&function=movefirst';
    url= url + '&seekindex=CustomerKey';
    url= url + '&maxdata=' + maxdata;
    http.open('GET',url,false);
    http.send(null);
    document.getElementById('myreturn').value;
}

我的PHP

<?php include '../../tophat.php';

$_REQUEST['function']();

function movefirst(){
    $filename=$_REQUEST['filename'];
    $seekindex=$_REQUEST['seekindex'];
    $maxdata=$_REQUEST['maxdata'];
    opendbdata();
    $query="SELECT * FROM ". $filename . " ORDER BY " . $seekindex; 
    $result=mysql_query($query);
    $returnkey='';
    for ($i=0; $i<=$maxdata-1; $i++)  {
         $returnkey = $returnkey . mysql_result($result,0,$i) . "~";
    }
    echo $returnkey;
}

我在客户数据库中查找第一个客户,它返回记录,但在returnText的开头是函数的名称。这是.returnText的开头:"movefirst4SEASONS1~4 Seasons Pottery~336 Hammond Dr NE~"

我之前从未遇到过这个问题。在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

请注意

  • 允许用户执行此范围内可用的任何功能(例如dropDatabase()rebootServer()),因为您正在调用$_REQUEST['function']
  • 允许用户利用SQL Injection对数据库进行任何更改或阅读机密信息!

答案 1 :(得分:0)

我怀疑tophat.php中还有一些调试代码。尝试在include之后放置一个die(),看看新的responseText是否只包含函数名。

那就是说,我同意并赞成Steffen的答案 - 像

这样的语法
$_REQUEST['function']();

看起来像是一场等待发生的灾难。即使它不是,它仍然看起来像它,但无论如何都是坏的。