2016-05-02 35 views
1

下面的代码是否安全?从GET构造DateTime()是否安全?

$d = new DateTime($_GET["date"]); 

AFAIK有没有直接的方式来使用日期格式字符串用于恶意目的。但是,在不同的操作系统中可能存在一些特殊情况,因此 - 您是否会添加额外的检查以确保日期看起来完全像yyyy-mm-dd

我使用PHP5.6 & PHP7。

+0

这取决于你要与'$ D'下一步要做什么 – vaultboy

+2

您应经常检查的日期格式,但不只是出于安全原因(这里没有太多的安全问题),但为了“管理”你的日志...你可能会提供一个更好的消息,“在__construct()中出现意外的字符串...”,以防格式错误... – Random

回答

2

是的,这段代码总是安全的。在最糟糕的情况下,有人会尝试发送恶意内容,并抛出异常,因为它不是有效的日期。我将包装在一个try/catch:

try { 
    $date = new \DateTime($_GET["date"]); 
} catch (\Exception $e) { 
    // Log and return a status code of 404 or similar 
}