Podczas pracy nad projektem, który brzmi od /dev/urandom
w celu wygenerowania losowych bajtów, zasugerowano, żebym sprawdził, aby upewnić się, że /dev/urandom
to urządzenie, a nie tylko plik.Jak zagwarantować określony plik to urządzenie na BSD/Linux z PHP?
Najprostszym sposobem wydaje się być coś takiego:
/**
* Is the given file a device?
*
* @param string|resource $file
* @return boolean
*/
function is_device($file)
{
if (is_resource($file)) {
$stat = fstat($file);
} elseif (is_readable($file) && !is_link($file)) {
$stat = stat($file);
} else {
return false;
}
return $stat['rdev'] !== 0;
}
Moje pytanie jest dwojaki:
- Jest to najlepszy sposób, aby sprawdzić, że ten plik to urządzenie?
- Czy istnieją okoliczności, w których ta kontrola może się nie udać?
Ważne: Rozwiązanie muszę musi być w PHP bez zależności od dowolnego PECL rozszerzeń lub niestandardowego kodu C. Projekt ma postać a pure PHP 5 polyfill of PHP 7's random_bytes()
and random_int()
functions i ma być instalowany w dowolnych projektach PHP 5 autorstwa Composer.
[Widziałeś to?] (Http://insanecoding.blogspot.com/2014/05/a-good-idea-with-bad-usage-devurandom.html) –
Moje obecne nieoficjalne stanowisko brzmi: "TOCTOU problemy i ataki polegające na wyczerpaniu deskryptorów plików są poza zakresem.Jeśli twój system plików jest pwned, to nic nie może zrobić twoja aplikacja internetowa PHP, żeby cię uratować. " –