Während der Arbeit an einem Projekt, das von /dev/urandom
liest, um zufällige Bytes zu generieren, wurde vorgeschlagen, dass ich überprüfe, um sicherzustellen, dass /dev/urandom
ein Gerät nicht nur eine Datei ist.Wie garantiert man eine bestimmte Datei ist ein Gerät unter BSD/Linux von PHP?
Die einfachste Art und Weise scheint so etwas wie zu sein:
/**
* 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;
}
Meine Frage ist zweifach: dass diese Datei ein Gerät überprüfen
- Ist dies der beste Weg?
- Gibt es Umstände, unter denen diese
$stat['rdev'] !== 0
Prüfung fehlschlagen kann?
Wichtige: Die Lösung, die ich ohne Abhängigkeit von jedem PECL-Erweiterungen oder benutzerdefinierte C-Code in PHP sein müssen müssen. Das Projekt ist a pure PHP 5 polyfill of PHP 7's random_bytes()
and random_int()
functions und soll in jedem anderen PHP 5-Projekt von Composer installiert werden können.
[Haben Sie gesehen?] (Http://insanecoding.blogspot.com/2014/05/a-good-idea-with-bad-usage-devurandom.html) –
Meine derzeitige inoffizielle Haltung ist, "TOCTOU Probleme und Erschöpfungsattacken bei Dateideskriptoren liegen außerhalb des Geltungsbereichs. Wenn Ihr Dateisystem komprimiert ist, kann Ihre PHP-Webanwendung nichts mehr tun, um Sie zu retten. " –