我有一个在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;
}
}
Run Code Online (Sandbox Code Playgroud)
我可以这样做吗?
mydomain.com/myfile.php?execute('my query here')
Run Code Online (Sandbox Code Playgroud)
?
为了防止其他人想到做这样的事情,我觉得有必要回答" 不要这样做!!!!! "
这是一个可怕的安全漏洞和等待发生的灾难.您也可以将控制权移交给服务器.除此之外,它还详细介绍了系统的设计方式(再次向黑客提供不必要的信息).此外,您无法保证何时,如何,以何种顺序,使用什么参数,在什么情况下可以调用函数,函数使用的cookie变量的内容是什么xxx.您正以惊恐的方式放弃对系统的控制.
现在让我们来看看你的具体例子.如果我看到一个网站,?execute(...)它会引发一个红旗.我,黑客,对自己说,"当然不会,没有人会做那样的事情!" 所以我谷歌那部分URL确定这个堆栈溢出问题出现了,我看到你正在将参数转储到MYSQL查询中."好主,我甚至不需要SQL注入!"
所以,作为一个邪恶的人,我决定放弃这个查询:
.php?execute('SELECT * FROM `information_schema`.`tables`')
Run Code Online (Sandbox Code Playgroud)
现在我看到你的数据库的结构,看,有一个叫做的表user_account_info!我想知道如何使用这些信息来敲诈你数百万美元......
我可以试试
.php?execute('SELECT * FROM user_account_information')
Run Code Online (Sandbox Code Playgroud)
或者可能
.php?execute('SELECT credit_card FROM user_account_information')
Run Code Online (Sandbox Code Playgroud)
但真的为什么停在那里,我真的可以用螺丝钉
UPDATE user_account_information SET vital_customer_information =
ENCRYPT(vital_customer_information, my_key_which_you_will_never_crack);
Run Code Online (Sandbox Code Playgroud)
现在,您希望获得重要的客户信息吗?你如何在我的开曼群岛银行账户存款,然后我会考虑它....
即使忽略安全隐患,这也是糟糕的设计.通过让用户透明地调用代码中的函数,可以实现封装,信息隐藏等的全部要点.