我有一个在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')
答案 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']
来获取查询。