Avete alcune opzioni qui:
1 - Scaricare una discarica da una vera RNG (this one offerte discariche da una base di decadimento radioattivo) e l'uso che, tanto per essere sicuro di non continuare a leggere lo stesso nn byte. Un po 'goffo, ma un'opzione.
2 - Hanno PHP eseguire qualcosa che legge da /dev/urandom
per suo conto (brutto)
3 - ripiegare su mt_rand()
(anche brutto, ma ho visto questo fatto):
for ($i = 0; $i < $count/8; $i++) {
$output .= dechex(mt_rand(0, 0x7fffffff));
}
Tutte le opzioni sono goffi e brutte, sfortunatamente. La cosa migliore da fare è assicurarsi di non avere a che fare con open_basedir
. Tuttavia, questo particolare fastidio potrebbe essere risolto.
Infine - non sono suscettibili di volare con il vostro ospite, ma forse vale la pena provare:
Si può chiedere il vostro ospite di fornire urandom
nella vostra directory home in modo da poter leggere. Dite loro è necessario accedere urandom per generare numeri casuali in modo da poter fornire una maggiore sicurezza per gli utenti, poi chiedere loro di eseguire:
mknod urandom c 1 9
Nella vostra directory home. L'ho appena provato sul mio server, funziona (ma root ha bisogno di farlo per te). C'è no motivo pratico per impedirti di utilizzare il generatore di numeri pseudo casuali del sistema, che potresti fare diversamente con qualcosa di diverso da PHP. Questo è in realtà il modo più semplice per consentire loro di accedere a urandom
perché non richiede alcuna eccezione nella configurazione di PHP o vhost.
L'accesso vietato a /dev/random
è una cosa ragionevole da fare, dal momento che /dev/random
deve essere reintegrato dall'entopia del sistema disponibile (nuova) e potrebbe causare blocchi importanti sulla lettura se esauriti che potrebbero verificarsi spesso su server a basso traffico.Tuttavia, è garantito che /dev/urandom
non blocchi mai dal momento che riutilizza il pool entropico interno una volta esaurito, motivo per cui si tratta di una fonte di qualità inferiore.
Nota
Non sto dicendo che l'idea di open_basedir
è uno cattivo, ma rompe il codice buona troppo. Un classico chroot
è molto meglio, ma più difficile, ed è per questo che ti imbatti in open_basedir
molto più di un vero chroot. Come minimo, qualsiasi programma dovrebbe poter accedere ai dispositivi null
, zero
e urandom
su un server.
Davvero una bella spiegazione. – elliotrock