可以安全地将日期直接插入MySQL数据库吗?

时间:2016-04-22 19:36:57

标签: php mysql validation date datetime

所以目前我有一个带有date类型元素的表单,在提交时我使用这个处理表单:

<?php
// Only process POST requests.
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $date_posted = $_POST['date_posted'];

    $stmt = $mysqli->prepare("INSERT INTO test(date_posted) VALUES (?)");
    $stmt->bind_param("s", $date_posted);
    $stmt->execute();
    $stmt->close();

    http_response_code(200);
} else {
    http_response_code(403);
}
exit;

为了本演示的目的,这是简化的 - 但它可以正常工作。

我的问题是,通常我会对text表单元素等内容进行各种字符检查,但是对于date对象 - 直接插入数据库是否安全像这样?在插入安全性之前,我是否应该检查任何潜在的滥用行为?

2 个答案:

答案 0 :(得分:4)

  

所以目前我有一个带有date

类型元素的表单

任何形式的客户端检查都不能依赖。浏览器可能不支持该输入类型,或者用户可能会绕过它。

  

在插入安全性之前,是否有任何潜在的滥用行为?

您正在使用绑定参数,因此不需要考虑SQL注入。

可能发生的最糟糕的事情是有人发送的东西不是日期(或者不是格式正确的数据)。这将有两个结果之一:

  • 它不符合表中列数据类型所需的数据语法,并且INSERT失败(因为您没有测试错误,所以无声)
  • 它被插入到表中(例如,如果你有一个VARCHAR字段),你稍后尝试将其视为日期,然后获取错误或错误的数据。

答案 1 :(得分:-2)

您应该像对待任何其他领域一样进行同样的健全性检查。

您的表单可能只允许日期条目,但我可以在“date_posted”POST字段中向您的服务器发送POST请求,并将其用于SQL注入。