从URL调用函数

时间:2013-06-04 09:47:58

标签: php function url execute

我有一个在PHP中有函数的类。这个文件在服务器上...我可以从url调用这个文件中的任何函数吗? 我不想修改这个文件......我只知道功能名称......有功能

class mClass {
function execute($q) {
    $result = mysql_query($q) or die(mysql_error()."<br />".$q);
    }
function getParams($var, $default = '')
{
    $tmpvar = $default;
    if ( isset($_REQUEST[$var]) ) $tmpvar = $_REQUEST[$var];
    return $tmpvar;
}
}
我可以这样做吗?

 mydomain.com/myfile.php?execute('my query here')

2 个答案:

答案 0 :(得分:5)

为了防止其他人想到做这样的事情,我觉得有必要回答“不要这样做!!!!!

这是一个可怕的安全漏洞和等待发生的灾难。您也可以将控制权移交给服务器。除此之外,它还详细介绍了系统的设计方式(再次向黑客提供不必要的信息)。此外,您无法保证何时,如何,以何种顺序,使用什么参数,在什么情况下可以调用函数,函数xxx使用的cookie变量的内容是什么。你正以惊恐的方式放弃对系统的控制。

现在让我们看一下你的具体例子。如果我看到一个有?execute(...)的网站,它会引发一个红旗。我,黑客,对自己说,“当然不会,没有人会做那样的事情!”所以我谷歌那部分网址确定这个堆栈溢出问题出现了,我看到你正在将参数转储到一个MYSQL查询。 “好主,我甚至不需要SQL注入!”

所以,作为一个邪恶的人,我决定放弃这个查询:

.php?execute('SELECT * FROM `information_schema`.`tables`')

现在我看到了数据库的结构,看,有一个名为user_account_info的表!我想知道如何使用这些信息来敲诈你数百万美元...

我可以试试

.php?execute('SELECT * FROM user_account_information')

或者

.php?execute('SELECT credit_card FROM user_account_information')

但是真的为什么停在那里,我真的可以用

转动螺丝
UPDATE user_account_information SET vital_customer_information =
    ENCRYPT(vital_customer_information, my_key_which_you_will_never_crack);

现在,您希望获得重要的客户信息吗?你如何在我的开曼群岛银行账户存款,然后我会考虑它......

即使忽略安全隐患,这也是糟糕的设计。 通过让用户透明地调用代码中的函数,可以实现封装,信息隐藏等的全部内容。

答案 1 :(得分:2)

其他人都指出你真的不应该这样做,我同意。但是,如果有人把枪放在你的头上,你会这样做的方式就是:

mydomain.com/myfile.php?sql=my%20query%20here

然后在PHP中,您将使用$_GET['sql']来获取查询。

对所有警告过Bobby Tables的人们来说,你有没有听说过限制GRANT权限?当我们运行只需要读取的应用程序时,它们使用仅具有SELECT权限的帐户,而不是UPDATE或DELETE。像这样的脚本肯定应该使用权限非常有限的帐户。