从可可应用程序获取MySql数据库 - PHP桥接
问题描述:
我想通过我正在开发的可可应用程序从我的MySql数据库下载一系列行。我使用一个从我的应用程序接收索引的PHP,并将所有行都发送回该索引。 我的可可代码:从可可应用程序获取MySql数据库 - PHP桥接
NSInteger index = 0;
NSString *urlString = [NSString stringWithFormat:@"http://localhost/test.php?index=%d&", index];
NSArray *items = [NSArray arrayWithContentsOfURL:[NSURL URLWithString: urlString]];
NSLog(@"%@", [items description]);
当PHP收到GET
变量index
运行这段代码:
$index = $_GET['index'];
$Keys = array(...);
mysql_connect($Host, $User, $Password) or die("Unable to connect to database");
mysql_select_db($Database) or die("Unable to select database");
$result = mysql_query("SELECT * FROM transactions where id > $index ORDER BY id");
$plist = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$plist .= "<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n";
$plist .= "<plist version=\"1.0\">\n";
$plist .= "<array>\n";
while($row = mysql_fetch_array($result)) {
$plist .= "\t<dict>\n";
foreach($Keys as $key){
$plist .= "\t\t<key>$key</key>\n";
$plist .= "\t\t<string>$row[$key]</string>\n";
}
$plist .= "\t</dict>\n";
}
$plist .= "</array>\n";
$plist .= "</plist>";
echo $plist;
unset($_GET['index']);
如果有多达来自index
30行,最后ID这一切工作正常的数据库!如果从我的可可代码中,我设置了index
来请求多达30行或者我将index
设置为零(以请求所有数据库)... NSArray
对象不包含任何内容!
我在做什么错?
答
对不起!我自己解决了!有一个编码问题! 只是改变:
utf8_encode($row[$key])
,我已经解决了这个问题!
答
这不会回答你的问题,但你的代码是广泛开放的SQL注入攻击。解决它的方法是一个非常简单的的sprintf:
$result = mysql_query(sprintf("SELECT * FROM transactions where id > %d ORDER BY id", intval($index)));
现在,如果恶意用户试图注入文本,在$指标变量,则INTVAL + sprintf的组合将只是把它变成数字0,从而保护你的分贝。
感谢您的建议! – BitDrink 2009-07-28 11:20:25