elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  seguridad en php
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: seguridad en php  (Leído 6,941 veces)
bruj0

Desconectado Desconectado

Mensajes: 111


Iori Yagami


Ver Perfil
Re: seguridad en php
« Respuesta #10 en: 23 Enero 2007, 17:04 pm »

Ya está, el codigo sería este:

Código:
<?php

$mi_curl = curl_init ("http://www.google.es/intl/en_com/images/logo_plain.png");
curl_setopt ($mi_curl, CURLOPT_HEADER, 0);
curl_setopt($mi_curl, CURLOPT_RETURNTRANSFER, 1);
curl_exec ($mi_curl);
$tabla[]=curl_getinfo($mi_curl);
if($tabla[0]['http_code']==200){
$fs_archivo = fopen ("logo_plain.png", "w");
curl_setopt ($mi_curl, CURLOPT_FILE, $fs_archivo);
curl_exec ($mi_curl);
fclose ($fs_archivo);
}
curl_close ($mi_curl);

?>

Con esto si no encuentra el fichero o url genera un codigo de error 404, si todo esta bien genera codigo 200 en un array con identificador http_code.

Lo he probado y va perfecto, de todas maneras echale un ojo y dime como lo ves.  Probé el tuyo de arriba y si le pasas una imagen que está en un http o ftp y no la encuentra te generaba un archivo vacio.



« Última modificación: 23 Enero 2007, 17:15 pm por bruj0 » En línea

bruj0

Desconectado Desconectado

Mensajes: 111


Iori Yagami


Ver Perfil
Re: seguridad en php
« Respuesta #11 en: 23 Enero 2007, 17:06 pm »

trabaja con el valor de curl_error(); o curl_errno(); que te devuelve 0 en caso no haya ningun error :P
je si lo de file se me paso
voy a buscar la e-zine en si

curl_errno() aunque no encuentre el fichero en la url te va a devolver un valor de como si no hubiese error, por lo menos es lo q he entendido tras hacerle unas pruebas; y creo que es porq realmente no genera un error si no encuentra la url, sino q simplemente te devuelve la pagina de error en caso de q sea http


En línea

alone-in-the-chat


Desconectado Desconectado

Mensajes: 587


Ver Perfil
Re: seguridad en php
« Respuesta #12 en: 23 Enero 2007, 17:09 pm »

Interesante ;)
lo voy a tener en cuenta para cuando vuelva a usar el curl :D

Parece bueno el de arriba
y ya encontra el e-zine
;) dame tu correo
para enviartela
Saludos.
En línea

Because maybe
You're gonna be the one that saves me
And after all
You're my wonderwall
d[n_n]b
bruj0

Desconectado Desconectado

Mensajes: 111


Iori Yagami


Ver Perfil
Re: seguridad en php
« Respuesta #13 en: 23 Enero 2007, 17:11 pm »

Sale debajo del abatar en el muñekito verde tipo msn  ;D
En línea

bruj0

Desconectado Desconectado

Mensajes: 111


Iori Yagami


Ver Perfil
Re: seguridad en php
« Respuesta #14 en: 23 Enero 2007, 17:20 pm »

Ya que me parece interesante el tema este de CURL pongo los datos que guadaría el array tabla de ejemplo de arriba ya que me parece de lo mas interesante los valores que quedan almacenados.


Citar
Array (
  • => Array ( http:// => [url]http://www.google.es/intl/en_com/images/logo_plain.png [content_type] => image/png [http_code] => 200 [header_size] => 206 [request_size] => 103 [filetime] => -1 [ssl_verify_result] => 0 [redirect_count] => 0 [total_time] => 0.165719 [namelookup_time] => 0.008859 [connect_time] => 0.059704 [pretransfer_time] => 0.059751 [size_upload] => 0 [size_download] => 8072 [speed_download] => 48708 [speed_upload] => 0 [download_content_length] => 8072 [upload_content_length] => 0 [starttransfer_time] => 0.115428 [redirect_time] => 0 ) )
Aqui se puede ver el tipo de contenido, el codigo que ha generado la consulta, tamaños del archivos, tiempos de descarga, tiempos de conexión, cantidad de datos descargados, velocidad media de la descarga, etc, etc
En línea

el-brujo
ehn
***
Desconectado Desconectado

Mensajes: 21.590


La libertad no se suplica, se conquista


Ver Perfil WWW
Re: seguridad en php
« Respuesta #15 en: 23 Enero 2007, 17:31 pm »

4)
PHP

Editaremos el Archivo php.ini

expose_php = Off

Para evitar mostrar la versión del PHP en las cabeceras X-Powered-By: PHP, etc.

; Resource Limits ;

max_execution_time = 30 --> máximo tiempo de ejecución de un script php. Si en 30 segunos no obtiene respuesta el script se para y sale un "timeout" como errror.

memory_limit = 8M --> tamaño maximo que puede consumir un script php.

; File Uploads ;

Si queremos enviar ficheros al servidor, aqui lo podemos permitir:

file_uploads = On --> si queremos o no queremos

upload_tmp_dir = F:webspublic --> el directorio donde se copiarán los archivos que nos suban.

upload_max_filesize = 1M --> el tamaño máximo que queremos que nos envien.

Una caracteristica muy importante, especialmente para hostings, es la posibilidad de no permitir algunas de las funciones de PHP. La razon es muy sencilla: algunas funciones de PHP como system, proc, etc hacen y permiten ejecutar comandos del  sistema, lo que puede provocar problemas de seguridad. Por ejemplo, un usuario quizas quiera ejecutar un comando "no peligroso" como uptime, pero otro usuario mal intencionado puede utilizar otros comandos del sistema para extraer informacion comprometida de la maquina: como id, who, cat, etc.

Hosting gratuitos como Lycos, iespana tienen capadas estas funciones por lo comentado arriba, es potencialmente peligroso.

Para no permitir la ejecucion concreta de algunas funciones en PHP (no confundir con comandos) es con:

disable_functions =exec,system,shell_exec,readfile

Aunque las funciones en PHP son exec(), debemos ponerlo sin ().

Por ejemplo en Mi Arroba:

Warning: fsockopen, pfsockpen, show_source, php_uname, ini_alter, ini_restore, ini_set, getrusage, get_current_user, set_time_limit, getmyuid, getmypid, dl, leak, listen, chown, chmod, chgrp, realpath, tmpfile, link() has been disabled for security reasons.

Más restrictivo:

Funciones a deshabilitar:

exec, system, shell_exec, readfile, passthru, escapeshellcmd, proc_open, posix_uname, posix_getuid, posix_geteuid, posix_getgid, getcwd

Otra manera es hacer funcionar el php en safe_mode. Esto se indica en el php.ini y se activa con la opción:

Safe_mode = ON

o sea modo seguro. Muchos hostings gratuitos lo tienen activado por defecto.  De esta manera varias funciones están desactivadas y muchas otras comprueban los permisos a la hora de leer ficheros, etc.

http://www.zend.com/manual/features.safe-mode.functions.php

allow_url_fopen off --> para no dejar que se abran archivos remotos

register_globals off  --> desactivar las variables globales para que no se pueda permitir la inyección a variables que no están supuestos a modificar (muy importante).

Otra manera intersante de progeter el php es con el magic_quotes_gpc:

Copy/paste de http://vulnfact.com/papers/VF-php_secure.txt

 - Buscamos la directiva magic_quotes_gpc, que quizá este en Off, pues la activamos con
    On. Esto hace la adición automática del caracter de escape "" en variables tomadas
    de GET, POST y Cookies.

  magic_quotes_gpc = On ; magic quotes for incoming GET/POST/Cookie data

  - Para evitar que en lugar de enviar cadenas mal intencionadas, sean almacenadas en
    bases de datos o archivos de texto. Debemos activar magic_quotes_runtime.

  magic_quotes_runtime = Off ; magic quotes for runtime-generated data.

Para mayor seguridad, podemos hacer que un vhost (virtual host) del apache no tenga php:

#bastaría con añadir esta linea dentro del vhost del apache
php_admin_flag engine ON

O bien podemos deshabilitar el safe_mode en un vhost (dominio)

php_admin_flag safe_mode Off

Más info:
http://es2.php.net/manual/en/configuration.changes.php


open_basedir = none

En el vhost del Apache:

php_admin_value open_basedir /home/user/public_html

De esta manera sólo dejamos abrir los ficheros que estén en ese directorio (para evitar problemas).

De la misma manera deberíamos logear los errores del php pero no mostrarlos (evitaremos path disclosures, etc).

Añadimos varias instrucciones en el vhost del apache:

php_flag display_errors Off
php_flag log_errors On
php_value error_log "/home/uesr/logs/errorsphp"

Por si todo esto falla y consiguen una shell:

#le damos permisos sólo al root para este fichero
chmod 700 /usr/bin/wget
# modo invariable
chattr +i /usr/bin/wget

Lo mismo para los comandos:

wget, curl, lynx, w3m, framebuffer, links2 (navegadores) y gcc, cc y demás compiladores o binarios que nos parezcan potencialmente peligrosos.

  Se podría decir que hasta ahí tenemos mas o menos asegurado PHP. ¿Fácil, no?.

Fuente:
http://foro.elhacker.net/index.php/topic,251.0.html
En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines