2016-04-22 66 views
0

所以目前我有date类型的元素,我提交的过程中使用这种形式时的一种形式:安全地将日期直接插入MySQL数据库?

<?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对象 - 是否可以像这样直接插入数据库?在插入安全措施之前,我是否应该检查是否存在潜在的滥用情况?

+0

那一个算作字符串我认为 –

回答

-2

你应该做任何其他领域的同样的理智检查。

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

+1

准备好的声明不会删除这个可能吗? – user3420034

+1

该代码不容易受SQL注入攻击。 – Quentin

+0

可能是你的意思是xss攻击? – HddnTHA

4

所以目前我有类型日期

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

在插入安全明智之前,我是否应该检查是否存在潜在的滥用情况?

您正在使用绑定参数,所以SQL注入不是问题。

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

  • 它不符合在表中的列数据类型所需的数据语法和INSERT失败(默默的,因为你不测试错误)
  • 它插入到表中(例如,如果你有一个VARCHAR字段),然后你尝试把它当作一个日期,然后得到错误或坏数据。
+0

在这种情况下,我在数据库中使用了一个DATETIME字段,所以我想它只是不插入该元素。感谢信息,给我一点安心! :) – user3420034