从URL调用函数


Call Function From URL

我有一个类在PHP函数。这个文件在服务器上…我可以从url从这个文件调用任何函数吗?我不想修改这个文件…我只知道函数名,这里是function

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')

?

为了防止其他人设想做这样的事情,我觉得有义务回答"不要这样做!!!!! "

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

现在让我们看看你的具体例子。如果我看到一个网站有?execute(...),那就会发出危险信号。作为黑客,我想,"当然不会,没有人会做这样的事情!"所以我谷歌了一下URL的那一部分,果然出现了堆栈溢出的问题,我看到你把参数转储到一个MYSQL查询。"天哪,我甚至不需要sql注入!"

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

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

现在我看到了你的数据库结构,看,有一个名为user_account_info的表!我想知道如何利用这些信息向你勒索数百万美元……

I could try

.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);

现在,你想要回你重要的客户信息?你先在我开曼群岛的银行账户里存点钱,然后我再考虑....

即使忽略安全隐患,这也是一个糟糕的设计。通过让用户在代码中透明地调用函数,封装、信息隐藏等的全部意义都被打破了。

其他人都指出你真的不应该这样做,我同意。但如果有人拿枪指着你的头,你可以用这样的URL:

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

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

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