我正在构建一个示例服务器,以便我可以学习PHP,并且想知道这是否是保护我的数据库的好方法。基本上我发送自己的API密钥。这甚至做了什么有用的事情,或者这很容易克服。
如果这很可怕,采用这种方法的标准方法是什么?
以下是php文件
<?php
//Check if insert function exists
$apiKey = "6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF";
if(function_exists($_GET['insert']) && ($_GET['key'])==$apiKey) {
$id = $_GET['id'];
$first=$_GET['first'];
$last = $_GET['last'];
//If found, call the function inser with value as a parameter
$_GET['insert']($id,$first,$last);
}
?>
Web请求看起来像(来自iOS应用);
NSURL*url=[NSURL URLWithString:@"http://localhost/Tutorials/index.php?insert=insert&id=9000&first=YOOOO&last=LOOOO&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF"];
//URL request
NSURLRequest*request=[NSURLRequest requestWithURL:url];
//Set the connection
connection = [NSURLConnection connectionWithRequest:request delegate:self];
if (connection) {
webData=[[NSMutableData alloc]init];
}
答案 0 :(得分:1)
为了证明它有多不安全,我可以请求此页面:
http://example.com/yourpage.php?insert=exec&id=rm+-rf+%2F&key=6dM7V0n5GqYJLTMibQDf2gA2a94h8hbF
除非某些配置阻止它,否则这将擦除您的服务器驱动器,就像PHP可以访问它(可能是您的整个网站)
相反,您应该创建一个有效函数列表,并按ID引用它们。将函数存储在数组中,并获取GET参数指向的索引。
答案 1 :(得分:0)
是的,这是不安全的,您可以强制客户端进入HTTPS连接,或使用某种双向加密,因为这种方式非常不安全。
看看这里:
http://tinsology.net/2009/06/creating-a-secure-login-system-the-right-way/