Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] seguridad web

Estas en el tema de seguridad web en el foro de PHP en Foros del Web. hola amigos de nuevo , aqui estoy dando la lata de nuevo Queria crear una lista de todas las vulnerabilidades que puede haber en una ...

  #1 (permalink)  
Antiguo 17/07/2012, 15:08
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
seguridad web

hola amigos de nuevo , aqui estoy dando la lata de nuevo

Queria crear una lista de todas las vulnerabilidades que puede haber en una web y ataques que se pueden realizar que ustedes conozcan desde el mas tonto que pueda haber.

por ejemplo yo conozco entre otros

xss cross site scripting
injectionsql

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar datos sensibles y base de datos

etc....

ustedes cuales conocen????

esta lista de vulnerabilidades servira de ayuda a programadores para solventar los problemas y ademas me servira de ayuda para un proyecto de seguridad web que estoy tratando la idea es intentar tener una lista lo mas completa

Última edición por webankenovi; 17/07/2012 a las 15:24
  #2 (permalink)  
Antiguo 17/07/2012, 16:59
Avatar de Rodrhigo  
Fecha de Ingreso: septiembre-2011
Ubicación: Temuco-Valdivia-Osorno
Mensajes: 254
Antigüedad: 12 años, 6 meses
Puntos: 48
Respuesta: seguridad web

Esos 2 son los principales "vulnerabilidades que se pueden haber en una web" pero te falta otra importante y de la que derivan cientos de vulnerabilidades y es........

El escaneo de puertos abiertos. Por ejemplo uno puede hacer un nmap(para escanear puertos) a una web y darse cuenta que esa web tiene el puerto 23 (telnet) abierto y entonces se podria hacer fuerza bruta al puerto 23 para tener acceso a la consola del sistema(por dar un ejemplo)....
Tambien podria tener el puerto 3306(MySql) abierto.....osea que soporta una conexion remota a mysql.....y tambien podrias hacer fuerza bruta o probar con contraseñas por defecto para el user "root"..... pero generalmente cuando se abre el puerto 3306 se le añade la opcion para que determinada ip se conecte..... haci que puede no funcionar.

-Otra es el ataque de denegacion de servicio..... pero no hace mas que saturar la web y bajarla pero luego de unas horas de detenerse el ataque vuelve a estar arriba.

Tambien existen formas de engañar a los usuarios(pero no afecta a la web) Configurando los DNS por unos propios..... haci el usuario cuando quiere entrar a una web esta entrando a la web del atacante.

Otra forma de afectar a los usuarios es modificar el archivo host que se encuentra en :
C:\WINDOWS\system32\drivers\etc.... Lo que hace es redireccionar una direccion a la direccion que se le asigne.
Por ejemplo si yo agrego esta linea:
200.10.226.212 www.forosdelweb.com

Lo que pasara es que cada vez que intente acceder a forosdelweb en realidad estare visitando google.com(200.10.226.212)..... y haci el "atacante" podria crear una web similar a forosdelweb y pedirle el user y pass y el usuario pensara que visita la web real...... pero en realidad esta apuntado a la web del atacante.

Salu2
  #3 (permalink)  
Antiguo 17/07/2012, 17:09
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

pues añado a la lista 'seguridad de puertos' , se puede añadir un script que rechaze la entrada por esos puertos no??

y por las demas cuestiones como no afectan a la web no las vamos a añadir

---------------------------------------------------------------------------------------------


xss cross site scripting
injectionsql

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar datos sensibles y base de datos
seguridad de puertos <---- añadido
  #4 (permalink)  
Antiguo 17/07/2012, 17:54
 
Fecha de Ingreso: mayo-2012
Mensajes: 76
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: seguridad web

muy interesante, estoy haciendo mi web y al acabarla tendré que meterme en todo este fregado de seguridad, así que ya tengo la lista hecha :D
  #5 (permalink)  
Antiguo 17/07/2012, 18:05
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

bueno esta lista es muy pequeña , aun quedan muchas cosas haber si van añadiendo cosillas.

me alegro que te guste ya que uno de mis propositos es ayudar a esa gente que no tiene muchos o ningun conocimiento de seguridad . . .. . . saludos

---------------------------------------------------------------------------------------------


xss cross site scripting
injectionsql

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos <---- añadido
robo se sessiones<---- añadido
autenticacion de usuarios<---- añadido
autorizacion usuarios niveles<---- añadido
token formularios<---- añadido
proteger directorios .htaccess<---- añadido

Última edición por webankenovi; 17/07/2012 a las 18:17
  #6 (permalink)  
Antiguo 17/07/2012, 18:19
 
Fecha de Ingreso: enero-2011
Ubicación: Argentina
Mensajes: 80
Antigüedad: 13 años, 2 meses
Puntos: 12
Respuesta: seguridad web

Interesante tema!!

Yo conozco un vídeo que muestra como un atacante lleva a cabo su cometido, es realmente una lección pero no sé si estará bien que lo comparta al enlace por aquí.

Saludos!
  #7 (permalink)  
Antiguo 17/07/2012, 18:23
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

hola amigo , no interesa que la gente sepa como hacer las cosas pero si puedes decir que tipo de ataque fue el que realizo

---------------------------------------------------------------------------------------------


xss cross site scripting
injectionsql
RFI (Remote File Inclusion):<---- añadido

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos <---- añadido
robo se sessiones<---- añadido
autenticacion de usuarios<---- añadido
autorizacion usuarios niveles<---- añadido
token formularios<---- añadido
proteger directorios .htaccess<---- añadido
nunca confiar en los usuarios<---- añadido
no usar variables globales<---- añadido
consultas sql preparadas<---- añadido
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.<---- añadido
Recuerda definir siempre las variables que vayas a usar.Siempre inicializar las variables<---- añadido
Mensajes de error en el acceso deben ser genéricos.no dar informacion<---- añadido

Última edición por webankenovi; 18/07/2012 a las 08:48
  #8 (permalink)  
Antiguo 18/07/2012, 08:53
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

bueno amigos no se corten y colaboren , añado unos temas nuevos en la lista

--------------------------------------------------------------------------------------------


xss cross site scripting
injectionsql
RFI (Remote File Inclusion)
CSRF (Cross Site Request Forgery)<---- añadido
Directory Traversal<---- añadido
Upload Inyection<---- añadido

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos
robo se sessiones
autenticacion de usuarios
autorizacion usuarios niveles
token formularios
proteger directorios .htaccess
nunca confiar en los usuarios
no usar variables globales
consultas sql preparadas
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.
Recuerda definir siempre las variables que vayas a usar.Siempre inicializar las variables
Mensajes de error en el acceso deben ser genéricos.no dar informacion
verificar codigo<---- añadido

Última edición por webankenovi; 18/07/2012 a las 13:02
  #9 (permalink)  
Antiguo 19/07/2012, 12:43
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

cuentes sus experiencias si alguna vez fue atacado para conocer posibles vulnerabilidades

añado 2 nuevos temas a la lista




xss cross site scripting
injectionsql
RFI (Remote File Inclusion)
CSRF (Cross Site Request Forgery)
Directory Traversal
Upload Inyection
Hash Collision Vulnerability<---- añadido

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos
robo se sessiones
autenticacion de usuarios
autorizacion usuarios niveles
token formularios
proteger directorios .htaccess
nunca confiar en los usuarios
no usar variables globales
consultas sql preparadas
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.
Recuerda definir siempre las variables que vayas a usar.Siempre inicializar las variables
Mensajes de error en el acceso deben ser genéricos.no dar informacion
verificar codigo
habilitar captcha en formularios <---- añadido

Última edición por webankenovi; 19/07/2012 a las 12:49
  #10 (permalink)  
Antiguo 12/09/2012, 14:22
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Hola amigos os traigo una muy buena documentacion sacada del manual de php para prevenir vulnerabilidad de fijación en aplicaciones Web, lastima que este en ingles pero no dejen de leerla por ese pequeño detalle, merece la pena .

http://www.acros.si/papers/session_fixation.pdf
  #11 (permalink)  
Antiguo 12/09/2012, 14:30
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: seguridad web

xss cross site scripting
injectionsql
RFI (Remote File Inclusion)
CSRF (Cross Site Request Forgery)
Directory Traversal
Upload Inyection
Hash Collision Vulnerability

no hablo solo de terminos si no de consideraciones a tener en cuenta por ejemplo tambien

escapar datos y consultas
verificar siempre datos y compararlos
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos
robo se sessiones
autenticacion de usuarios
autorizacion usuarios niveles
token formularios
proteger directorios .htaccess
nunca confiar en los usuarios
no usar variables globales
consultas sql preparadas
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.
Recuerda definir siempre las variables que vayas a usar.Siempre inicializar las variables
Mensajes de error en el acceso deben ser genéricos.no dar informacion
verificar codigo
habilitar captcha en formularios
Restringir permisos a usuario de MySQL u otra base de datos <-------añadido
  #12 (permalink)  
Antiguo 27/09/2012, 10:44
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Aporto una charla de para mi uno de los mejores Chema Alonso , habla sobre la seguridad en aplicaciones web , es buenisimo.

http://www.youtube.com/watch?v=JlNh1wiLsQo
  #13 (permalink)  
Antiguo 16/01/2013, 14:11
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Añado un nuevo video de chema alonso donde se habla de vulnerabilidades en aplicaciones web escritorio o movil .

http://www.youtube.com/watch?v=lR7KF2rVUYk

ademas os recomiendo un libro , Writing Secure Code by Michael Howard , chema alonso en el video habla de el .
  #14 (permalink)  
Antiguo 16/01/2013, 15:35
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

xss cross site scripting
- reflected xss <-------añadido
- persistent xss <-------añadido
injectionsql
lateral sql injection <-------añadido
RFI (Remote File Inclusion)
- webshell <-------añadido
CSRF (Cross Site Request Forgery)
Directory Traversal
Upload Inyection
Hash Collision Vulnerability
Session Fixation
clickjacking <-------añadido


tratamiento de datos de entrada escapar y verificacion
tratamiento de datos del servidor , verificar siempre (http_referer , user_agent , etc....) <-------añadido
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
Mensajes de error deben ser genéricos.no dar informacion (en ninguna pagina)
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos
autenticacion de usuarios
autorizacion usuarios niveles
token formularios
proteger directorios .htaccess
nunca confiar en los usuarios
no usar variables globales
consultas sql preparadas y saneamiento de datos
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.
Recuerda definir siempre las variables que vayas a usar.
Siempre inicializar las variables
verificar codigo
habilitar captcha en formularios
Restringir permisos a usuario de MySQL u otra base de datos
realizar testing auditoria de tu codigo fuzzing <-------añadido
validar archivos, imagenes , etc... que se suben mediante una subida de archivos <-------añadido

-----------------------------------
| aRmAtE dE vAlOr PaRa UnA dUrA bAtAllA |
-----------------------------------

Última edición por webankenovi; 22/01/2013 a las 13:17
  #15 (permalink)  
Antiguo 29/01/2013, 12:55
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

xss cross site scripting
reflected xss
persistent xss
injectionsql
lateral sql injection
RFI (Remote File Inclusion)
JPG file inclusion <-----------añadido
local file inclusion <-----------añadido
webshell
CSRF (Cross Site Request Forgery)
Directory Traversal
Upload Inyection
Hash Collision Vulnerability
Session Fixation
clickjacking


tratamiento de datos de entrada escapar y verificacion
tratamiento de datos del servidor , verificar siempre (http_referer , user_agent , etc....)
desactivar magic_quotes , register_globals y todo lo que tenga que ver con errores display_errors
no mostrar nunca errores a los usuarios
Mensajes de error deben ser genéricos.no dar informacion (en ninguna pagina)
encriptar contraseñas
codificar y proteger datos sensibles y base de datos
seguridad de puertos
autenticacion de usuarios
autorizacion usuarios niveles
token formularios
proteger directorios .htaccess
nunca confiar en los usuarios
no usar variables globales
consultas sql preparadas y saneamiento de datos
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles.
Recuerda definir siempre las variables que vayas a usar.
Siempre inicializar las variables
verificar codigo
habilitar captcha en formularios
Restringir permisos a usuario de MySQL u otra base de datos
realizar testing auditoria de tu codigo fuzzing
validar archivos, imagenes , etc... que se suben mediante una subida de archivos

-----------------------------------
| aRmAtE dE vAlOr PaRa UnA dUrA bAtAllA |
-----------------------------------

Última edición por webankenovi; 29/01/2013 a las 13:01
  #16 (permalink)  
Antiguo 29/01/2013, 15:21
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: seguridad web

Aporto un par de cosas para ayudar en la seguridad..
- Dejar sólo accesible 1 solo punto de entrada, index.php.Todo el resto de código php no debe ser accesible por http.
- Definir los parámetros que recibe una página.Todas las páginas que puedan accederse en la web, deben tener una configuración que,entre otras cosas, debe definir qué parametros recibe esa página, cuáles son opcionales, cuáles requeridos, y de qué tipo son cada uno.
Por ejemplo, para una página llamada "listado.php", que acepta , por ejemplo, un campo de ordenacion "sortby", y el número de página, sería algo como
Código PHP:
Ver original
  1. $páginas=array(
  2.        /* ... */
  3.       "listado"=>array(
  4.             "source"=>"pages/listado.php", /* fichero que genera la pagina */
  5.              "params"=>array(
  6.                        "sortby"=>array("TYPE"=>"String","REQUIRED"=>false),
  7.                         "page"=>array("TYPE"=>"Integer", "REQUIRED"=>false)
  8.                                      )
  9.                                   )
Esto no sólo sirve para el escapeado / binding, etc, sino también como documentación de la página.
Es parecido a ver tu web como una clase, siendo las páginas los métodos públicos.

Estos parámetros, recibidas por $_GET (aunque yo hago cosas parecidas para $_POST), se asignan a un objeto Request, y se hace unset($_GET), antes de incluir pages/listado.php.Todo acceso a los parámetros se hace a través de Request.

Seguridad extra por $_GET se obtiene haciendo hashing de los parámetros de las urls.
Otras medidas son no incluir los campos clave de los formularios (los que usualmente son campos hidden).En vez de esos campos, se incluye un hash, que apunta a una variable de sesion que contiene los índices para ese formulario.
Otra opción es hacer hash de los campos índice, e incluir ese campo hash como otro campo "hidden".
Obviamente, cuando digo "hash", me refiero a hash de valores + cadena secreta.
  #17 (permalink)  
Antiguo 29/01/2013, 15:32
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Cita:
Iniciado por dashtrash Ver Mensaje
- Dejar sólo accesible 1 solo punto de entrada, index.php.Todo el resto de código php no debe ser accesible por http.
En este punto concuerdo contigo totalmente ya que es la estructura que yo sigo y animo a que apuesten por esta estructura , tiene muchas ventajas.

Cita:
Iniciado por dashtrash Ver Mensaje
Otras medidas son no incluir los campos clave de los formularios (los que usualmente son campos hidden).En vez de esos campos, se incluye un hash, que apunta a una variable de sesion que contiene los índices para ese formulario.
podria explicarlo con un ejemplo aunque sea muy basico , para que todo el mundo pueda entenderlo?

muchas gracias por tu aportacion , muy interesante.

De grano en grano llena la gallina el buche.
  #18 (permalink)  
Antiguo 29/01/2013, 15:50
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: seguridad web

El ejemplo:
Vamos a editar un usuario, con campo clave "id".
En vez de incluir en el formulario:
Código HTML:
Ver original
  1. <input type="hidden" name="id" value="35" />

Lo que se hace en PHP es:
Código PHP:
Ver original
  1. <?php
  2.    /* Se ha obtenido en $row los datos del usuario.
  3.        MY_SECRET_HASH está definido en la sesion, y es inicializado a una cadena aleatoria.
  4.        $formName es un nombre que le demos al formulario.
  5.    */
  6.    $hash=md5($_SESSION["MY_SECRET_HASH"].$formName.$row["id"]);
  7.    $_SESSION["FORMS"][$hash]=array("id"=>$row["id"]);
  8. ?>
  9. <input type="hidden" name="hash" value="<?php echo $hash;?>" />

Al recibir el POST, se obtiene el valor de hash, se recupera el id de la sesion, se une con el resto de los $_POST, antes de procesar el formulario.

El objetivo es impedir que, manipulando las variables POST, se acceda a objetos que, por descuido en el lado del servidor, el usuario no puede tener acceso.
  #19 (permalink)  
Antiguo 29/01/2013, 16:08
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Ya que estamos aporto una conferencia

Spring I/O 2012 - Seguridad web mediante Spring MVC y HDIV - Roberto Velasco

http://www.youtube.com/watch?v=w-8DQEPubBM
  #20 (permalink)  
Antiguo 29/01/2013, 16:23
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: seguridad web

Pues, ya que estamos, agrego una lista de problemas y posibles soluciones: http://www.forosdelweb.com/f18/aport...a-php-1011808/
__________________
- León, Guanajuato
- GV-Foto
  #21 (permalink)  
Antiguo 30/01/2013, 15:08
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Voy a agregar un aporte , se basa en sanear los datos que entrega el cliente al servidor digamos como una capa intermedia , he de explicar que el script solamente esta basado en datos $_GET pero su uso lo aconsejo en todas las variables $GLOBALS globales y sanear segun la necesidad , este script es automatico y sanea todos los datos que provienen de $_GET antes de llamarlo en la aplicacion para su uso , lo que se trata es entregarselo a la aplicacion ya saneado para su uso , la verificacion sen este caso en los $_GET lo he basado solamente en alfanumericos solo dejaremos pasar datos originales que sean alfanumericos de lo contrario retiraremos cualquier caracter invalido , revaluarla como NULL o destruirla totalmente , antes de el saneamiento guardaremos en memoria en una variable de session el dato original , la intencion es verificar los datos que sean alfanumericos de esta manera estamos fortificando el sistema y eliminado varias vulnerabilidades web.

ami me gusta aplicarlo en vez de solo a $_GET en $GLOBALS y segun el array ya sea $_POST , $_FILES , $_REQUEST aplicar el saneamiento correspondiente , asegurandonos de que no entra nada que no tuviera que llegar.

si deseas que no solo deje pasar la puerta a alfanumericos tan solo cambia la funcion ctype_alnum() , este ejemplo es muy basico y espero que sirva como orientacion

el script viene configurado con un ataque simple , despues de ver el ataque descomenta las lineas DE PRUEBA

de una en una , son ejemplos sencillos de que hacer en caso de que la variable no fuera en este caso alfanumerico , retirar caracteres , convertirlos o simplemente dar un valor null al dato , para que no pudiera actuar.

para hacer pruebas viene en el script un get javascript de prueba pero puedes pasar datos via url y automaticamente los escapara , prueba el resultado

una manera muy simple de evitar algunas vulnerabilidades web ya que solo dejando pasar alfanumericos evita muchos posibles ataques

Código PHP:
Ver original
  1. <?php
  2.      
  3.     // creamos la session
  4.     session_start();
  5.      
  6.     // un ejemplo de un get javascript
  7.     $_GET['QUERY']= "<script language='javascript' type='text/javascript'>alert('TU WEB ES VULNERABLE PODRIA HACER MUCHAS COSAS MALAS.');</script>";
  8.      
  9.     // volcado de datos get , dato original.
  10.     var_dump($_GET);
  11.      
  12.     // comprobacion de get
  13.     if( ! isset($_GET) || empty($_GET))
  14.     {
  15.         // mensaje de salida si es false
  16.         print('No existe ninguna variable get');
  17.     }
  18.     else
  19.     {
  20.         // verificacion de datos
  21.         foreach($_GET as $value=>$val)
  22.         {
  23.             // creamos la session con el dato original , guardamos en memoria el dato original antes de actuar
  24.             $_SESSION['GET'][$value] = $val;
  25.      
  26.             // comprobamos si el valor es alfanumérico
  27.             if( ! ctype_alnum($_GET[$value]))
  28.             {
  29.                 // en este caso imaginemos que no existe ningun saneamiento, para ver que podria pasar.
  30.                
  31.                 // PRIMERO PROBAREMOS SIN NINGUN ESCAPADO , DESPUES DESCOMENTAR LOS EJEMPLOS
  32.      
  33.                 // vamos a sanear ahora los datos (convertir caracteres htmlspecialchars)o (retirarlos strip_tags())
  34.      
  35.                 // ejemplo de funciones
  36.      
  37.                 //$_GET[$value] = strip_tags($_GET[$value]);
  38.      
  39.                 // $_GET[$value] = htmlspecialchars($_GET[$value]);
  40.  
  41.                 // $_GET[$value] = NULL;
  42.  
  43.                 // unset($_GET[$value]);
  44.  
  45.  
  46.               /*  tambien podemos añadir verificaciones para otros tipos de datos como por ejemplo un email
  47.  
  48.               if(! preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_GET[$value]))
  49.               {
  50.  
  51.                 $_GET[$value] = NULL;
  52.  
  53.               }
  54.  
  55.               */
  56.  
  57.                      
  58.                    
  59.      
  60.                
  61.            
  62.      
  63.             }
  64.             // ejecutar variable para la prueba
  65.             echo $_GET[$value];
  66.         }
  67.     }
  68.      
  69.     // volcado de datos get , saneados.
  70.     var_dump($_GET);
  71.      
  72. ?>


espero haberme explicado lo mejor posible , no soy muy tecnico sorry!!

Última edición por webankenovi; 30/01/2013 a las 15:52
  #22 (permalink)  
Antiguo 02/02/2013, 11:39
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

aporto funciones para encriptar/desencriptar codificar/decodificar , protegiendo asi la informacion

mcrypt_encrypt
http://www.php.net/manual/es/functio...pt-encrypt.php

mcrypt_decrypt
http://www.php.net/manual/es/functio...pt-decrypt.php


convert_uuencode
http://www.php.net/manual/es/functio...t-uuencode.php

convert_uudecode
http://www.php.net/manual/es/functio...t-uudecode.php

mcrypt_generic
http://www.php.net/manual/es/functio...pt-generic.php

mdecrypt_generic
http://www.php.net/manual/es/functio...pt-generic.php

y a continuacion funciones hash de un solo sentido para proteger passwords por ejemplo , olvidense de md5 , sha1 etc...

crypt
http://es.php.net/manual/es/function.crypt.php

password_hash
http://es.php.net/manual/es/function.password-hash.php

password_verify
http://es.php.net/manual/es/function...ord-verify.php


si sabeis mas funciones ,postearlas.thanks

Última edición por webankenovi; 02/02/2013 a las 14:17
  #23 (permalink)  
Antiguo 02/02/2013, 15:24
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: seguridad web

Se le olvido

base64_encode()
http://php.net/manual/es/function.base64-encode.php

y base64_decode()
http://php.net/manual/es/function.base64-decode.php


Nota: para encriptar de manera 100% segura de cara a lo que pueda ver el cliente de cara a la información, en lugar de:

Cita:
<?php
/* Se ha obtenido en $row los datos del usuario.
MY_SECRET_HASH está definido en la sesion, y es inicializado a una cadena aleatoria.
$formName es un nombre que le demos al formulario.
*/
$hash=md5($_SESSION["MY_SECRET_HASH"].$formName.$row["id"]);
$_SESSION["FORMS"][$hash]=array("id"=>$row["id"]);
?>
<input type="hidden" name="hash" value="<?php echo $hash;?>" />
Yo haria:

Cita:
<input type="hidden" name="hash" value="<?php echo $id ?>" />
Y despues en la recogida de datos, encripto ese valor y lo comparo con el de la db, de este modo el usuario no se puede ni imaginar que se cuece a lvl servidor.
  #24 (permalink)  
Antiguo 02/02/2013, 15:38
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Cita:
Iniciado por David1992 Ver Mensaje
en verdad no se me ha olvidado e incluso me he dado cuenta de un error , base64_encode no es seguro que digamos ya que no usa ninguna clave es decir yo me encuentro con algo asi

VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==

y usando simplemente base64_decode puedo obtener el valor real

This is an encoded string

el error que he comentado es con convert_uuencode ya que tampoco usa ninguna clave. claro que hay metodos donde podemos generar nosotros mismo un salt o concatenar claves añadirlas a la codificacion etc , pero yo hablo de la funcion en si tal cual .

gracias por añadir la funcion y muy bueno lo del input tambien
  #25 (permalink)  
Antiguo 02/02/2013, 16:02
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: seguridad web

Cita:
Iniciado por webankenovi Ver Mensaje
en verdad no se me ha olvidado e incluso me he dado cuenta de un error , base64_encode no es seguro que digamos ya que no usa ninguna clave es decir yo me encuentro con algo asi

VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==

y usando simplemente base64_decode puedo obtener el valor real

This is an encoded string

el error que he comentado es con convert_uuencode ya que tampoco usa ninguna clave. claro que hay metodos donde podemos generar nosotros mismo un salt o concatenar claves añadirlas a la codificacion etc , pero yo hablo de la funcion en si tal cual .

gracias por añadir la funcion y muy bueno lo del input tambien


mira lo que hay furrulando por internet... esto yo creo que es seguro, ademas lo mejoro un poco para complicarlo:

Cita:
function encrypt($string, $key) {
$result = '';
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)+ord($keychar));
$result.=$char;
}
return base64_encode(base64_encode(base64_encode(base64_e ncode($result))));
}

$cadena_encriptada = encrypt("LA CADENA A ENCRIPTAR","LA CLAVE");



function decrypt($string, $key) {
$result = '';
$string = base64_decode(base64_decode(base64_decode(base64_d ecode($string))));
for($i=0; $i<strlen($string); $i++) {
$char = substr($string, $i, 1);
$keychar = substr($key, ($i % strlen($key))-1, 1);
$char = chr(ord($char)-ord($keychar));
$result.=$char;
}
return $result;

$cadena_desencriptada = decrypt("LA CADENA ENCRIPTADA","LA CLAVE QUE SE USÓ PARA ENCRIPTARLA");




Asi te deja meter una clave y tal :) seguro que tambien es aplicable al que tu dices, no lo e mirado mucho
  #26 (permalink)  
Antiguo 02/02/2013, 16:06
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

yo te hablo de la funcion tal cual sin crear una funcion personalizada , esta claro que aplicandole una key es mas seguro y se le puede aplicar muchas cosas mas , pero repito hablo de la funcion en si .

gracias por el aporte .
  #27 (permalink)  
Antiguo 02/02/2013, 16:38
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: seguridad web

Cita:

Yo haria:

Cita:
Código PHP:
Ver original
  1. <input type="hidden" name="hash" value="<?php echo $id ?>" />
Y despues en la recogida de datos, encripto ese valor y lo comparo con el de la db, de este modo el usuario no se puede ni imaginar que se cuece a lvl servidor.
Qué es ese "$id"? Creo que no sabes para qué sirve el código que estabas mirando...Repásalo...

Última edición por dashtrash; 02/02/2013 a las 16:44
  #28 (permalink)  
Antiguo 02/02/2013, 17:31
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: seguridad web

Cita:
Iniciado por dashtrash Ver Mensaje
Qué es ese "$id"? Creo que no sabes para qué sirve el código que estabas mirando...Repásalo...
Para encriptar el valor del input que tiene el cliente, pero eso no es necesario, ese $id es su nombre de usuario o la fecha sin encriptar ni nada, despues en las comprobaciones a lvl servidor ya lo encriptas, cuando lo recojes, y lo cotejas con la DB asi el usuario no se quedara extrañado si ve un valor encriptado por hay furrulando... aunque sea hidden.
  #29 (permalink)  
Antiguo 02/02/2013, 17:44
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: seguridad web

Y eso que tiene que ver con el código con el que lo comparas?...Mira el código..repásalo..
Es un sistema de ocultación de las keys de un formulario..No tiene nada que ver con usar sistemas de encriptación y desencriptación.
  #30 (permalink)  
Antiguo 02/02/2013, 18:01
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 2 meses
Puntos: 2
Respuesta: seguridad web

Cita:
Iniciado por dashtrash Ver Mensaje
Y eso que tiene que ver con el código con el que lo comparas?...Mira el código..repásalo..
Es un sistema de ocultación de las keys de un formulario..No tiene nada que ver con usar sistemas de encriptación y desencriptación.
Ya me fige, estas encriptando un id de usuario para despues usarlo para cotejar los accesos y permisos O.o, lo que yo te digo es que hay puedes meter el id sin encriptar, pero tienes razon es mas inseguro mi modo lo tuyo tiene su lógica, ahora viene la critica:

¿no sera mas lógico ya que el id esta en una sesion, que el PHP lo recoja por defecto en lugar de andar recogiendolo en los formularios?

es decir, usas un include, con la sesión y los datos del usuario y lo añades donde vas a precisar ese dato, asi el usuario no anda rulando su id encriptado en cada solicitud...

Almenos eso es lo que yo entendi, pero quien mejor que el autor para explicar su verdadera utilidad :)

Etiquetas: seguridad, sistema, aplicaciones
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 10 personas




La zona horaria es GMT -6. Ahora son las 01:59.