Tenemos una aplicación IRC de Java donde los usuarios pueden ejecutar PHP arbitrario y obtener el resultado. Aquí está un ejemplo de lo que este se utiliza para:código arbitrario de encarcelamiento PHP
btc: <php>$btc = json_decode(file_get_contents('https://btc-e.com/api/2/1/ticker'), true); $ticker = $btc['ticker']; echo "Current BTC Ticker: High: $".$ticker['high']." Low: $".$ticker['low']." Average: $" . $ticker['avg'];
También tenemos una configuración pitón, pero nos gusta porque PHP PHP no requiere nuevas líneas en el código en cualquier lugar. (Debido a que este es el IRC, no podemos damos saltos de línea a menos que Exec un archivo .py cargado web)
La cuestión es cómo evitar que la gente tratando de explotar el sistema, como por ejemplo en:
<php>echo readfile("/etc/passwd");
Lo cual, claramente, leerá el archivo de contraseña para que todos lo vean.
También estamos teniendo este problema, después de que hemos tratado de bloquear readfile():
<php>$rf = readfile; echo $rf("/etc/passwd");
¿Cómo deberíamos ir sobre la seguridad de este sistema? (El código completo está en github, para cualquier interesado: https://github.com/clone1018/Shocky)
Como un lado, no se está exponiendo información realmente sensible, ya que todo está en una máquina virtual, por lo que no es una "bomba de tiempo" ni nada . Sin embargo, todavía queremos bloquearlo.
¿Por qué su servidor web tiene los derechos para leer '/ etc/passwd'? Bloquee a su usuario web para empezar. – afuzzyllama
@afuzzyllama Eso no tiene nada que ver con el usuario de la web; '/ etc/passwd' es legible en todo el mundo por defecto en la mayoría de las distribuciones de Linux.Algunos programas requieren acceso a ese archivo para funcionar, y de todos modos no contiene contraseñas. –
@Ryan P - Por "usuario web" me refiero al usuario que ejecuta Apache, no al usuario en el sitio web. – afuzzyllama