2016-05-02 2 views
1

Безопасен ли следующий код?Можно ли построить DateTime() из GET?

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

AFAIK нет прямых способов использования строки формата даты для злонамеренных целей. Однако в разных ОС могут быть некоторые особенности, поэтому - добавьте дополнительную проверку, чтобы убедиться, что дата выглядит точно так же, как yyyy-mm-dd?

Я использую PHP5.6 & PHP7.

+0

Это зависит от того, что вы собираетесь делать с '$ d' следующий – vaultboy

+2

Вы всегда должны проверить формат даты, но не только по соображениям безопасности (здесь не так много проблем с безопасностью), но для «управления» вашими журналами ... вы можете дать лучшее сообщение о том, что «непредвиденная строка в __construct() ...», если формат неверен ... – Random

ответ

2

Да, этот код всегда безопасен. В худшем случае кто-то пытается отправить что-то злонамеренное, и исключение выбрасывается, потому что это неверная дата. Я бы обернуть его в Try/уловом:

try { 
    $date = new \DateTime($_GET["date"]); 
} catch (\Exception $e) { 
    // Log and return a status code of 404 or similar 
} 
Смежные вопросы