【发布时间】:2014-02-09 19:54:12
【问题描述】:
我有一个简单的场景:用户连接到“get.php?city=london”,然后服务器在 MySQL 数据库中搜索与该请求匹配的数据并将其输出。
我正在使用以下代码来执行此操作:
<?php
$con = mysql_connect( 'localhost', 'user', 'pass') or die('Could not connect to mysql server.' );
mysql_select_db('mydb', $con) or die('Could not select database.');
if(!isset($city)) return;
$c=$_GET["city"];
$q = "select * FROM cities WHERE city = '{$c}'";
$re = mysql_query($q);
... etc
像这样简单地将 GET 变量插入到查询中是否安全?这会让我容易受到 MySQL 注入的攻击吗?有没有更安全的方法来做到这一点?
问候
更新:
这样会更安全吗?:
if(!isset($city)) return;
$city=$_GET["city"];
$q = "SELECT row1, row2 WHERE city= ?;";
$mysqli = new mysqli('localhost', 'root', 'pass', 'dbname');
$stmt = $mysqli->stmt_init();
if($stmt->prepare($q)){
$stmt->bind_param("s", mysql_real_escape_string($city));
$stmt->execute();
$stmt->bind_result($row1, $row2);
while ($stmt->fetch()) {
//do stuff with the data in the $row array
}
$stmt->close();
}
【问题讨论】:
-
使用
mysql_*扩展本身变得越来越不安全。使用mysqli。 -
我建议使用准备好的语句。这些天来似乎是最安全的。
-
bobby-tables.com。 'nuff说
-
谢谢.. 我更新了我的问题
标签: php mysql apache security http