2010-12-08 18 views
6

Cuál es la mejor manera de asegurar que sólo CRON ejecuta scripts PHP, y no otra persona quien tropezó con sus scripts PHP ..PHP y cron: problemas de seguridad

estaba pensando en una variable contraseña .... pero es este es un comando CRON legal? :

/usr/local/bin/php -f /home/mysite/public_html/dir/script?password=12345 

De esta manera la gente no puede ser capaz de ejecutar los mismos comandos cuando se visita el script PHP a través de HTTP (a menos que conozcan la contraseña)

Gracias.

Respuesta

13

Debe mantener este archivo fuera de public_html

/usr/local/bin/php -f /home/mysite/script 
// is secure from public access 
+2

gracias muy buenas. – Moe

+1

solución elegante .. +1 –

+1

aunque acepto que esta opción funciona, la única preocupación que muchas personas pueden tener es si están ejecutando algún tipo de marco. Yo, por ejemplo, ejecuto CI y todo se ejecuta a través del 'index.php' y estas secuencias de comandos cron deben estar en' public_html'.CI ofrece una función llamada 'is_cli_request()' que se puede usar para asegurarse de que la solicitud proviene de la línea de comando y no de apache. –

0

No coloque la secuencia de comandos dentro de su directorio public_html (o en cualquier lugar debajo de su documento) si solo necesita ejecutarlo desde cron. Es realmente así de simple.

0

Puede enviar params a un archivo PHP a través de la línea de comandos. Simplemente no como si estuvieras pensando.

http://www.php.net/manual/en/reserved.variables.argc.php

Sin embargo, también quieren mantener esto fuera de la carpeta html pública, al igual que los otros dicen. Entonces NO PUEDES surfear hacia ellos. PHP ejecutado desde la línea de comandos no necesita estar en ningún tipo de carpeta de vigilancia del servidor web.

0

O puede bloquear la ejecución por IP hacer algo como esto:

($ _SERVER [ 'REMOTE_ADDR'] == "127.0.0.1") or die ('NO ACCESO');

+1

$ _SERVER no está disponible para cron –

+0

En realidad, realmente creo que sí. Personalmente uso: $ isCLI = ($ _SERVER ['REMOTE_ADDR'] == $ _SERVER ['SERVER_ADDR']); if (! $ IsCLI) {die ("no no guppy guppy"); } –

0

Tener una contraseña podría funcionar, pero:

  • escribir una contraseña en su crontab es una mala idea porque otros usuarios locales podrían ser capaces de leerlo
  • Su sintaxis no funcionará (sería trate de ejecutar la secuencia de comandos "guión? password = 12345". los parámetros no pueden ser nombrados en shell script, por lo que tendría que ejecutar "script.php 12345"

Una solución válida sería comprobar en su Script PHP, que el entorno actual se parece al proporcionado por cron al iniciar comandos. Las variables de entorno específicas de Cron pueden ayudarlo a asegurarse de que su script se ejecute por cron y no por un usuario.

1

Supongamos que si u no quieren que nadie se ejecute el archivo a través de http continuación, establezca el cron mediante el uso de comandos PHP como que está haciendo y añadir htacess a cron carpeta para bloquear petición HTTP a la carpeta añadiendo

deny from all a htacess

Supongamos que si quieres la carpeta cron para ser protegido por contraseña a continuación, se puede hacer como se menciona en la URL

http://www.elated.com/articles/password-protecting-your-pages-with-htaccess/