Php 可能从日期字符串选择查询注入

Php 可能从日期字符串选择查询注入,php,sql,mysql,sql-injection,Php,Sql,Mysql,Sql Injection,我有个问题,有点奇怪。我的页面包含一个html链接,该链接刷新页面并调用PHP变量。此变量将日期字符串附加到url字符串,url字符串被送入MySQL查询,MySQL查询将获取与此日期匹配的记录。我认为这会导致注入,因为它有时会从数据库中删除用户 我知道在超链接中使用可能存在安全问题,但我想知道发生了什么。这也会对不同的浏览器产生不同的影响,比如它如何使用javascript。被删除的用户似乎只发生在某些人的计算机上 PHP代码计算三天后的时间戳,然后将其转换为SQL格式: $ts_threeD

我有个问题,有点奇怪。我的页面包含一个html链接,该链接刷新页面并调用PHP变量。此变量将日期字符串附加到url字符串,url字符串被送入MySQL查询,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\u real\u escape\u字符串传递$date时,必须怀疑$id或者我们看不到的东西


SELECT语句不会从数据库中删除内容。您的PHP文件中还有哪些负责删除用户的内容,以及是否存在一些中断的if/else逻辑,这些逻辑最终会通过一个函数来删除不应该删除的用户?

前面的回答很好地解释了您的问题

您可以通过以下方式验证您的“日”get var:

$day = '';
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $_GET['day'])
{
    $day = $_GET['day'];
} else {
    die("bye bye");
}

您甚至可以指定$day作为正则表达式的匹配部分。这样,如果你的垃圾中包含2009-09-03'这样的日期;落桌学生;,你把垃圾脱掉,你说得对。正则表达式应该是“^\d{4}-\d{2}-\d{2}$”^。我的错误
$day = '';
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $_GET['day'])
{
    $day = $_GET['day'];
} else {
    die("bye bye");
}