Mentre si lavora su un progetto che legge da /dev/urandom
per generare byte casuali, è stato suggerito di controllare che lo /dev/urandom
sia un dispositivo non solo un file.Come garantire che un file specificato sia un dispositivo su BSD/Linux da PHP?
Il modo più diretto sembra essere qualcosa di simile:
/**
* 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;
}
La mia domanda è duplice:
- È questo il modo migliore per controllare che questo file è un dispositivo?
- Ci sono circostanze in cui questo controllo
$stat['rdev'] !== 0
può fallire?
Importante: La soluzione che ho bisogno devono essere in PHP senza dipendere da alcun PECL estensioni o personalizzato C codice. Il progetto è a pure PHP 5 polyfill of PHP 7's random_bytes()
and random_int()
functions ed è concepito per essere installabile in qualsiasi progetto PHP 5 di Composer.
[Hai visto questo?] (Http://insanecoding.blogspot.com/2014/05/a-good-idea-with-bad-usage-devurandom.html) –
La mia attuale posizione non ufficiale è "TOCTOU i problemi e gli attacchi di esaurimento dei descrittori di file sono fuori ambito. Se il tuo filesystem è pwnato, non c'è nulla che la tua app web PHP possa fare per salvarti. " –