【问题标题】:Safe to insert date directly into MySQL database?将日期直接插入 MySQL 数据库是否安全?
【发布时间】:2016-04-22 19:36:57
【问题描述】:

所以目前我有一个带有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 对象 - 像这样直接插入数据库是否安全?在插入安全方面,我应该检查任何潜在的滥用行为吗?

【问题讨论】:

  • 我认为那个算字符串

标签: php mysql validation date datetime


【解决方案1】:

所以目前我有一个带有日期类型元素的表单

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

在插入安全措施之前,我是否应该检查任何潜在的滥用行为?

您使用的是绑定参数,因此无需担心 SQL 注入。

可能发生的最坏情况是有人发送的不是日期(或格式不正确的数据)。这将产生以下两种结果之一:

  • 不符合表中列数据类型要求的数据语法,INSERT失败(静默,因为你不测试错误)
  • 它被插入到表中(例如,如果您有一个 VARCHAR 字段),然后您尝试将其视为日期并得到错误或错误数据。

【讨论】:

  • 在这种情况下,我在数据库中使用了 DATETIME 字段,所以我想它只是不插入该元素。谢谢你的信息,让我安心一点! :)
【解决方案2】:

您应该进行与任何其他字段相同的完整性检查。

您的表单可能只允许输入日期,但我可以向您的服务器发送一个 POST 请求,在“date_posted”POST 字段中包含我想要的任何内容,并将其用于 SQL 注入。

【讨论】:

  • 准备好的语句不排除这种可能性吗?
  • 你的意思是xss攻击吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2016-04-11
  • 1970-01-01
  • 2014-07-13
  • 1970-01-01
  • 2020-09-02
相关资源
最近更新 更多