0

我有一个类在 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')

?

4

2 回答 2

5

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

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

现在让我们看看你的具体例子。如果我看到有?execute(...)它的网站会引发危险信号。我,黑客,心里想,“肯定不会,没有人会做那样的事!” 所以我用谷歌搜索了 URL 的那一部分,果然出现了这个堆栈溢出问题,我看到你正在将参数转储到MYSQL Query中。“天哪,我什至不需要 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);

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

即使忽略安全隐患,这也是糟糕的设计。让用户透明地调用代码中的函数会破坏封装、信息隐藏等的全部意义。

于 2013-06-04T09:50:25.310 回答
2

Everyone else is pointing out that you really shouldn't do this, and I agree. But if someone is putting a gun to your head, the way you would do it is with a URL like:

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

Then in PHP you would use $_GET['sql'] to get the query.

BTW, to all the people who warn about Bobby Tables -- haven't you heard of limiting GRANT permissions? When we run applications that only need to read, they use an account with only SELECT permission, not UPDATE or DELETE. A script like this one should definitely use an account with very limited permissions.

于 2013-06-04T10:00:23.767 回答