我有一个设置,我从表中删除条目。这个PHP/MySQL删除函数是否安全?
正是基于这我想可能是一个糟糕的方式反正启动URL的查询字符串。
因此,如果URL是:
http://www.example.com/delete.php?id=123&ref=abc
而且在delete.php的PHP如下:
$id=$_GET['id'];
$ref=$_GET['ref'];
$con = mysql_connect("blahblah","user","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("test", $con);
mysql_query("DELETE FROM mytable WHERE id=" . $id . " AND ref='" . $ref . "'");
mysql_close($con);
有没有办法让这个更安全......或这确实在任何方面都是安全的?
编辑:
OK,所以基于反馈我已经采取了新的方法。
list.php的包含了一组单选按钮为表中的每个条目的 - 如下:
$con = mysql_connect("localhost","username","password");
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("db", $con);
$result = mysql_query("SELECT * FROM myTable");
echo "<form name='wer' id='wer' action='delete.php' method='post' >";
echo "<table border='1'>";
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['title'] . "</td>";
echo "<td><input type='radio' name='test1' value='" . $row['id'] . "' /></td>";
echo "</tr>";
}
echo "</table>";
echo "<input type='submit' name='submit' value='Submit' />";
echo "</form>";
mysql_close($con);
而且delete.php看起来是这样的:
function check_input($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (!is_numeric($value)) {
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
$con = mysql_connect("localhost","user","password");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
$varID = check_input($_POST["id"]);
mysql_select_db("db", $con);
$sql="DELETE FROM myTable WHERE id IN (" . $varID . ")";
if (!mysql_query($sql,$con)) {
die('Error: ' . mysql_error());
}
mysql_close($con);
header("Location: list.php");
这是一个更好的办法去做吧?
的[如何使$ _GET更secure.?](http://stackoverflow.com/questions/3682480/how-do-i-make-get-more-secure) – 2011-05-21 12:39:09
可能重复@ Marcel Korpel:删除是一个幂等的操作。 – Gumbo 2011-05-21 12:49:20
@Gumbo:我一直认为不应该在GET请求中改变数据库。 – 2011-05-21 12:50:36