Tout en travaillant sur un projet qui lit à partir de /dev/urandom
pour générer des octets aléatoires, il a été suggéré que je vérifie pour s'assurer que /dev/urandom
est un périphérique pas simplement un fichier.Comment garantir qu'un fichier spécifié est un périphérique sur BSD/Linux de PHP?
La façon la plus simple semble être quelque chose comme:
/**
* 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;
}
Ma question est double:
- Est-ce la meilleure façon de vérifier que ce fichier est un périphérique?
- Y a-t-il des cas où ce contrôle
$stat['rdev'] !== 0
peut échouer?
Important: La solution que je besoin doit être en PHP sans dépendre de toutes les extensions PECL ou le code C personnalisé. Le projet est a pure PHP 5 polyfill of PHP 7's random_bytes()
and random_int()
functions et est destiné à être installé dans les projets PHP 5 de quelqu'un d'autre par Composer.
[Avez-vous vu ceci?] (Http://insanecoding.blogspot.com/2014/05/a-good-idea-with-bad-usage-devurandom.html) –
Ma position non officielle actuelle est "TOCTOU les problèmes et les attaques d'épuisement des descripteurs de fichiers sont hors de portée.Si votre système de fichiers est pwned, il n'y a rien que votre application web PHP peut faire pour vous sauver. " –