Почему snprintf / vsnprintf открывает / proc / self / maps при каждом вызове с% n?

$d = new DateTime('10-16-2003');

$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16

Редактировать: вы также можете передать конструктор DateTimeZone в DateTime (), чтобы гарантировать создание даты для требуемого часового пояса, а не для сервера по умолчанию.

2
задан Florian Weimer 3 March 2019 в 12:36
поделиться

1 ответ

Если glibc был скомпилирован с _FORTIFY_SOURCE=2, он проверяет, находится ли используемая строка формата в сегменте кода, доступном для записи (чтобы предотвратить класс ошибок безопасности, связанных с использованием %n для записи в контролируемые хакером области памяти) , Теперь для этого открывается glibc и читается /proc/self/maps, чтобы выполнить проверку.

Решения:

  1. Компиляция glibc без _FORTIFY_SOURCE=2.
  2. Не используйте %n (не имеет значения, находится ли он в памяти для записи или только для чтения).
0
ответ дан Bodo Thiesen 3 March 2019 в 12:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: