我有一个有点奇怪的问题。我的页面包含一个html链接,它刷新页面并调用PHP变量。此变量将日期字符串附加到url字符串,该字符串被输入MySQL查询,该查询将获取与此日期匹配的记录。我认为这会引起注入,因为它有时会从数据库中删除用户!
我知道在超链接中使用'#'可能存在安全问题,但我想知道最新情况。这也会对不同的浏览器产生不同的影响,看它是如何使用javascript的。被删除的用户似乎只发生在某些人的计算机上。
PHP代码计算三天后的时间戳,然后将其置于SQL格式:
$ts_threeDays = mktime(1,0,0,date('m'), date('d')+3-date('w'), date('y'));
$threeDaysAhead = date('y-m-d', $ts_second_day);
然后脚本会侦听页面上超链接传递的url字符串中的'day'变量:
$date = mysql_real_escape_string($_GET['day']);
JavaScript和超链接是:
<a href='#' onClick="document.location.href='planner.php?day=<?php echo $threeDaysAhead; ?>'"> 3 Days Later</a>
MySQL查询更大但是用户操作所需的唯一输入是上面的日期字符串。查询基本上看起来像这样(使用另一个select语句来访问users表):
SELECT planner.details FROM planner
WHERE planner.date = '$date' AND users.`user_id` = '$id' // Logged in Id superglobal
如果有人能帮助我并解释我的问题,我将非常感激。 非常感谢
答案 0 :(得分:2)
当你将$date
传递给mysql_real_escape_string
时,怀疑必须落在$id
或我们看不到的地方。
SELECT
语句不会从您的数据库中删除内容。您的PHP文件中还有哪些内容负责删除用户,您是否还有一些损坏的if
/ else
逻辑,这些逻辑最终会通过一个函数来删除用户?
答案 1 :(得分:0)
以前的回答很好地解释了你的问题。
你可以这样验证你的'day'获取var:
$day = '';
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $_GET['day'])
{
$day = $_GET['day'];
} else {
die("bye bye");
}