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. No encripta ningún id de usuario. Como te digo, no se usa md5 para encriptar.Se usa como hash.Los campos **clave** de un formulario, es decir: ...

  #31 (permalink)  
Antiguo 02/02/2013, 18:22
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, 8 meses
Puntos: 270
Respuesta: seguridad web

No encripta ningún id de usuario.
Como te digo, no se usa md5 para encriptar.Se usa como hash.Los campos **clave** de un formulario, es decir: si editas un id de usuario, el id de usuario.Si editas una noticia, el id de la noticia, etc,etc, *no* se envía al html. Lo que se envía, es un hash que indica en qué variable de sesión, se han almacenado los campos clave de ese objeto.
Se usa para evitar fallos de chequeos de permisos en queries, y que sea posible editar objetos que en principio el usuario no debería.Hay miles y miles de formularios que confían en que el campo clave (que suele ser un 'hidden'), es seguro, cuando es tan manipulable como cualquier otro.
  #32 (permalink)  
Antiguo 02/02/2013, 18:30
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, 8 meses
Puntos: 270
Respuesta: seguridad web

No se encripta ningún id.
Se crea un hash que identifica al formulario.Los campos *clave* del formulario, por ejemplo, el id de usuario, *no se envía al cliente*, sino que se guardan en la sesión bajo esa clave creada con un hash.Si editas al usuario con id 10, ese id no se envia al html (ni sin encriptar, ni encriptado).Evitas tanto que se manipule el id por el lado del cliente, como ciertos tipos de ataques CSRF.
  #33 (permalink)  
Antiguo 02/02/2013, 20:13
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: seguridad web

Alguno trucos para hacer nuestro sitio web más seguro:


- Trabajar con los datos que el cliente comparte encriptados, de este modo evitaremos posibles ataques de injección.

- Nunca usar el mismo encriptado para trabajar con el servidor y para proporcionar ids a los usuarios.

- Nunca imprimir en el codigo fuente (lado del cliente) contenido vulnerable para el servidor, tales como direcciones completas o parciales con valor de directorio local, ids de conexión o permisos, etc...

- Filtrar valores no encriptables por caracteres especificos, tales como letras de la A a la Z, números, tildes, parentesis, etc... no permitiendo segun el caso el uso de comillas entre otros.

- Intentar dar el mismo servicio por un mismo puerto genérico, para un formulario de envio de emails en PHP se puede usar el puerto 80 al igual que para el enlazado a archivos del servidor, no es necesario montar un FTP para cuatro imágenes.

- Repasar las variables en la programación y en la recogida de datos no dejando interrogantes posibles que causen "fakes" en el servidor.

- Dar permisos a ficheros y directorios de nuestro servidor segun vaya a emplearlo el propio servidor, si en una carpeta solo necesitamos leer le daremos permiso de solo lectura al usuario que mantiene el S.O. servidor conectado.

:p me faltaran muchos puntos clave seguramente pero estos son los que mas me encuentro por la red, tales como puertos inecesarios, servidores FTP para las imagenes de la web y cosas asi, espero que les sea de utilidad.
  #34 (permalink)  
Antiguo 02/02/2013, 20:19
 
Fecha de Ingreso: febrero-2013
Mensajes: 17
Antigüedad: 11 años, 10 meses
Puntos: 2
Respuesta: seguridad web

Cita:
Iniciado por dashtrash Ver Mensaje
No se encripta ningún id.
Se crea un hash que identifica al formulario.Los campos *clave* del formulario, por ejemplo, el id de usuario, *no se envía al cliente*, sino que se guardan en la sesión bajo esa clave creada con un hash.Si editas al usuario con id 10, ese id no se envia al html (ni sin encriptar, ni encriptado).Evitas tanto que se manipule el id por el lado del cliente, como ciertos tipos de ataques CSRF.
Uiss como estava en la pág 2 no lo habia leido, yo lo que hago es trabajar con encriptación unidireccional, asi aunque por lo que sea logren descargarse los ficheros del servidor no podran desencriptar la información y como las variables de sesion se pueden usar varias, en otra pongo el nombre de usuario para que el usuario lo vea y ya esta, ni siquiera yo puedo ver la info del usuario, asi me aseguro de que si hay robo de cuenta es por despieste del usuario y no por mi lvl de seguridad.
  #35 (permalink)  
Antiguo 04/02/2013, 13:52
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

TOP 10 OWASP

1 - Injection - https://www.owasp.org/index.php/Top_10_2010-A1
2 - Cross-Site Scripting (XSS) - https://www.owasp.org/index.php/Top_10_2010-A2
3 - Broken Authentication and Session Management - https://www.owasp.org/index.php/Top_10_2010-A3
4 - Insecure Direct Object References - Insecure Direct Object References - https://www.owasp.org/index.php/Top_10_2010-A4
5 - Cross-Site Request Forgery (CSRF) - https://www.owasp.org/index.php/Top_10_2010-A5
6 - Security Misconfiguration - https://www.owasp.org/index.php/Top_10_2010-A6
7 - Insecure Cryptographic Storage - https://www.owasp.org/index.php/Top_10_2010-A7
8 - Failure to Restrict URL Access - https://www.owasp.org/index.php/Top_10_2010-A8
9 - Insufficient Transport Layer Protection - https://www.owasp.org/index.php/Top_10_2010-A9
10 - Unvalidated Redirects and Forwards - https://www.owasp.org/index.php/Top_10_2010-A10


testing

https://www.owasp.org/index.php/OWAS...le_of_Contents


De la A a la Z

A

Account lockout attack
Asymmetric resource consumption (amplification)

B

Binary planting
Blind SQL Injection
Blind XPath Injection
Brute force attack
Buffer overflow attack

C

Cache Poisoning
Cash Overflow
Code Injection
Command Injection
Comment Injection Attack
Content Security Policy
Content Spoofing
CORS OriginHeaderScrutiny
CORS RequestPreflighScrutiny
Cross Frame Scripting
Cross Site History Manipulation (XSHM)
Cross Site Tracing
Cross-Site Request Forgery (CSRF)
Cross-site Scripting (XSS)
Cross-User Defacement
Cryptanalysis


C cont.

CSRF
Custom Special Character Injection

D

Denial of Service
Direct Dynamic Code Evaluation ('Eval Injection')
Direct Static Code Injection
Double Encoding

E

Execution After Redirect (EAR)

F

Forced browsing
Format string attack
Full Path Disclosure

H

HTTP Request Smuggling
HTTP Response Splitting

I

Inyección SQL

L

LDAP injection

M

Man-in-the-browser attack
Man-in-the-middle attack
Mobile code: invoking untrusted mobile code
Mobile code: non-final public field
Mobile code: object hijack

O

One-Click Attack
Overflow Binary Resource File

P

Page Hijacking
Parameter Delimiter


P cont.

Path Manipulation
Path Traversal

R

Regular expression Denial of Service - ReDoS
Relative Path Traversal
Repudiation Attack
Resource Injection

S

Server-Side Includes (SSI) Injection
Session fixation
Session hijacking attack
Session Prediction
Setting Manipulation
Special Element Injection
Spyware
SQL Injection

T

Traffic flood
Trojan Horse

U

Unicode Encoding

W

Web Parameter Tampering
Windows ::DATA alternate data stream

X

XPATH Injection
XPATH Injection Java
XSRF


RECOMENDACIONES


nunca confiar en los usuarios
hasear contraseñas
autenticacion de usuarios
autorizacion usuarios niveles
Mensajes de error deben ser genéricos.no dar informacion (en ninguna pagina)
token formularios
habilitar captcha en formularios
Siempre inicializar las variables
consultas sql preparadas y saneamiento de datos
Restringir permisos a usuario de MySQL u otra base de datos
seguridad de puertos
proteger directorios .htaccess
nombres de tus archivos y carpetas delicados esten en lugares no muy previsibles
verificar codigo
realizar testing auditoria de tu codigo fuzzing

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

Última edición por webankenovi; 04/02/2013 a las 14:01
  #36 (permalink)  
Antiguo 06/02/2013, 13:37
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

5.5.1. Guía de seguridad general

Cualquiera que utilice MySQL en un ordenador conectado a Internet debería leer esta sección para evitar los errores de seguridad más comunes.

http://dev.mysql.com/doc/refman/5.0/...uidelines.html
  #37 (permalink)  
Antiguo 17/03/2013, 15:41
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Vuel vo con una nueva entrada como de costumbre , esta vez con el top ten 2013 de owasp recien salido del horno, aunque decir que no hay apenas cambios

pagina oficial owasp
https://www.owasp.org/index.php/Top_10_2013-T10

blog chema alonso donde explica un poco la lista
http://www.elladodelmal.com/2013/03/...candidate.html

Y un poco sobre administracion de sessiones
https://www.owasp.org/index.php/Sess...nt_Cheat_Sheet

saludos ::..

Última edición por webankenovi; 17/03/2013 a las 16:14
  #38 (permalink)  
Antiguo 25/03/2013, 11:42
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Para resolver muchas dudas de los usuarios respecto al uso que se debe dar a las contraseñas y su hash , aqui os dejo una faq de php que resolvera alguna de vuestras dudas y hara vuestra aplicacion algo mas segura.

la faq responde a estas preguntas

- ¿Por qué debo usar hash en las contraseñas de los usuarios de mi aplicación?
- ¿Por qué las funciones hash más comunes como md5() y sha1() no son adecuadas para las contraseñas?
- ¿Qué hash debo aplicar a mis contraseñas, si las funciones hash más comunes no son adecuadas?
- ¿Qué es el salt?

http://es.php.net/manual/es/faq.passwords.php
  #39 (permalink)  
Antiguo 25/03/2013, 11:48
Avatar de loncho_rojas
Colaborador
 
Fecha de Ingreso: octubre-2008
Ubicación: En el mejor lugar del mundo
Mensajes: 2.704
Antigüedad: 16 años, 1 mes
Puntos: 175
Respuesta: seguridad web

Cita:
Iniciado por webankenovi Ver Mensaje


RECOMENDACIONES


nunca confiar en los usuarios
Jajaja.. esto está bueno
__________________
Ayudo con lo que puedo en el foro, y solo en el foro.. NO MENSAJES PRIVADOS.. NO EMAILS NI SKYPE u OTROS.

Antes de hacer un TOPICO piensa si puedes hallarlo en Google o en el Buscador del Foro...
  #40 (permalink)  
Antiguo 08/04/2013, 13:24
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Hoy traigo una nueva recomendacion, de un tema que aun no hemos tocado

Archivo de Configuración

'config.txt,config.php,config.ini,config.conf'

Cuando esté trabajando con archivos de configuración para su aplicación, las mejores prácticas dictan que utilice uno de los métodos siguientes:

- Es recomendable que almacene sus archivos de configuración donde no se pueda acceder a ellos directamente por medio del sistema de archivos.

- Si no tiene otra alternativa más que almacenar sus archivos de configuración en la raíz de documentos de su aplicación, debe adjuntar la extensión.php al nombre de sus archivos. De esta manera, aun si alguien accede a ellos directamente, la información no será impresa en forma de texto a la pantalla.

- La información en los archivos de configuración debe ser protegida ya sea por medio de codificación o con los permisos de grupo/usuario pertinentes en el sistema de archivos.

extraido de http://es.phptherightway.com/ donde puedes encontrar buenas practicas programando con php.

saludos . .
  #41 (permalink)  
Antiguo 15/04/2013, 11:10
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Despues de comentar un poquito sobre las vulnerabilidades llego la hora de la practica donde intentare ir explicando por capitulos cada una de ellas y por supuesto espero que con vuestra colaboracion

CAPITULO 1

Proteger directorios

- Seguramente en tu aplicacion tendras directorios donde no deseas que se pueda acceder a ellos directamente desde la url , para conseguir denegar el acceso voy a explicar 2 formas diferentes pero que pueden trabajar juntas .

1 - Crear un archivo .htaccess dentro del directorio en cuestion si el directorio se llama system por ejemplo el archivo debera encontrarse dentro de system/.htaccess , si tenemos mas directorios dentro de system igualmente deberemos crear el archivo .htaccess para garantizar que no se pueda acceder a ellos .

contenido .htaccess

Código Apache:
Ver original
  1. # en primer lugar prevenimos el listado de las carpetas
  2. IndexIgnore *
  3.  
  4. # en segundo no mostramos ningun listado , no indexa nada
  5. Options All -Indexes
  6.  
  7. # en tercera denegamos cualquier acceso a cualquier archivo
  8. Deny from all

tambien se debera agregar un index.html vacio dentro de todos los directorios ademas del .htaccess, seguridad extra para evitar el listado de los directorios y archivos

2- con php se crea una verificacion en los archivos donde no se desee que se pueda acceder desde la url

una verificacion , verificando si existe la constante en los archivos a proteger, la cual la debe de contener el archivo desde el que es llamado

protegido.php

Código PHP:
Ver original
  1. <?php
  2. if( ! defined('constante_de_seguridad'))
  3. {
  4. exit('acceso denegado');
  5. }
  6. ?>

ahora imaginemos que tenemos un index.php desde el cual queremos incluir un archivo protegido

index.php

Código PHP:
Ver original
  1. <?php
  2. define('constante_de_seguridad',true); // ya esta creada la constante y ya podemos acceder al fichero
  3.  
  4. include'protegido.php'; // si no estuviera definida la constante anterior se mostraria un mensaje de acceso denegado
  5.  
  6. ?>

Recuerda siempre los nombres de tus archivos y carpetas delicados no sean muy comunes y esten en lugares no muy previsibles.

observaciones : tambien se puede usar como otra medida un sistema de permisos para los usuarios, pero eso lo contare en un proximo capitulo sobre permisos y roles.

y esto es todo sobre el capitulo 1 , si sabes mas maneras de proteger archivos y/o directorios o de mejorar alguna ya expuesta o solo mostrar tu opinion ,por favor exponlo .

saludos y de aqui a nada seguimos con el capitulo 2

Última edición por webankenovi; 15/04/2013 a las 14:52
  #42 (permalink)  
Antiguo 17/04/2013, 05:58
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 2

Mensajes de error


- Respecto a los mensajes de error, no es recomendable mostrar ningun tipo de fallo de la aplicacion en produccion ya que es informacion que un usuario puede usar para despues usar para ciertos ataques por ello hemos de prevenir no revelar esa informacion , por lo cual desactivaremos mostrar mensajes de error.

en todos los archivos php desactivaremos los mensajes de error

ya sea en tu archivo php.ini o a traves de en tiempo de ejecucion , debemos desactivar display_errors y display_startup_errors , si no tienes acceso al php.ini deberemos hacerlo de esta forma

ini_set('display_errors','Off');
ini_set('display_startup_errors',false);

puedes insertarlo en cada archivo al principio de el o mediante un include para que sea maz facil su aztualizacion en caso de necesitarlo
Código PHP:
Ver original
  1. include 'display.php';

display.php

Código PHP:
Ver original
  1. <?php
  2. ini_set('display_errors','Off');
  3. ini_set('display_startup_errors',false);
  4. ?>

otra opcion es crear un entorno de trabajo

Código PHP:
Ver original
  1. define('ENTORNO','Desarrollo',false);
  2.      
  3.             switch(constant('ENTORNO'))
  4.             {
  5.                 case 'Desarrollo':
  6.          
  7.                 ini_set('display_errors','On');
  8.          
  9.                 ini_set('display_startup_errors',true);
  10.          
  11.                 break;
  12.          
  13.                 case 'Produccion':
  14.          
  15.                 ini_set('display_errors','Off');
  16.          
  17.                 ini_set('display_startup_errors',false);
  18.             }

Recuerda no dar informacion sensible si no mas bien generica un ejemplo es el siguiente

un archivo de login que al introducir el usuario mal, me responde :

- el usuario no existe

al introducir el usuario bien y la contraseña mal, me responde:

- la contraseña no es correcta

con lo cual me deja claro que el user si existe , deberia mostrar en tal caso

- el usuario o la contraseña no son correctos

usa la logica y no confies nunca en los usuarios

Eso es todo sobre el capitulo 2 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 3

capitulos

1 - proteger directorios : link http://www.forosdelweb.com/f18/segur...ml#post4410846
  #43 (permalink)  
Antiguo 17/04/2013, 06:27
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 3

Archivo de configuracion

- Para proteger el archivo de configuracion , lo primero es testear lo siguiente introduce la url hacia tu archivo de configuracion en el navegador y no deberia verse ningun elemento , deberia aparecer blanco y sin ningun codigo fuente (y si redirige hacia fuera o bloquea el acceso mejor aun , como explicamos en el capitulo 1 ), si no es asi , vamos a protegerlo de una manera basica

- 1 lo primero es ver la extension del archivo por seguridad deberia ser .php ya que no es accesible el contenido del codigo desde el navegador ya que si fuera .txt este si sera accesible desde el navegador .

- 2 usar lo que explique en el capitulo 1 para proteger los archivos y directorios sensibles de esta manera se negara el acceso a dicho archivo

- 3 codificar la informacion contenida en el

por lo cual si el archivo de configuracion estuviera en system/configuracion.ext , este directorio deberia contener un .htacces con el contenido publicado en capitulo1 , ademas deberia de contener un index.html , ademas en archivo de configuracion.php deberia de contener la constante de seguridad publicada en el capitulo 1 y ademas codificar la informacion del archivo.

un ejemplo sencillo de codificacion prodia ser base64_encode

Código PHP:
Ver original
  1. <?php
  2.  
  3. if( ! defined('constante_de_seguridad'))
  4. {
  5. exit('acceso denegado');
  6. }
  7.  
  8. $config['url'] = 'd2Vi';
  9.  
  10. // en vez de
  11.  
  12. $config['url'] = 'web';
  13.  
  14. ?>


Eso es todo sobre el capitulo 3 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 4

capitulos

1 - proteger directorios : link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
  #44 (permalink)  
Antiguo 17/04/2013, 06:58
 
Fecha de Ingreso: mayo-2012
Ubicación: shilito
Mensajes: 67
Antigüedad: 12 años, 7 meses
Puntos: 3
Respuesta: seguridad web

http://php.net/manual/es/filter.filters.sanitize.php

para sanitizar las variables y de uso facil
  #45 (permalink)  
Antiguo 17/04/2013, 09:47
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 4

Permisos y roles

- esta vez vamos a proteger aun mas los archivos dandoles permisos y roles segun el usuario. un sistema basico

- 1 vamos a crear los permisos y roles

Código PHP:
Ver original
  1. <?php
  2.  
  3. // invitado = 0
  4. // logueado , usuario normal = 1
  5. // logueado , usuario administrador = 2
  6.  
  7.  
  8. // primero en la base de datos debemos guardar esos roles segun el usuario en el momento del registro o manualmente
  9. // a poder ser codificada o hasheada por si alguien accede a la base de datos no sepa el estatus de los usuarios , aunque podria intuirlo pero bueno . .
  10.  
  11. // por defecto los user tendran un rol 1
  12.  
  13. INSERT INTO user (rol) VALUES (sha1('1'.'salt_rol'))
  14.  
  15. // ahora en el login seleccionaremos el rol y lo guardaremos en una session
  16.  
  17. SELECT rol FROM user
  18.  
  19. $_SESSION['ROL'] = $row['rol'];
  20.  
  21.  
  22. ?>

- 2 ya en el script de permisos.php , este se ha de incluir en todas las paginas

Código PHP:
Ver original
  1. <?php
  2.  
  3. if(isset($_SESSION['ROL']))
  4. {
  5.     switch($_SESSION['ROL'])
  6.     {
  7.         case sha1('1'.'salt_rol'):
  8.         $user['rol'] = 'usuario';
  9.         break;
  10.  
  11.         case sha1('2'.'salt_rol'):
  12.         $user['rol'] = 'administrador';
  13.         break;
  14.  
  15.         default:
  16.         $user['rol'] = 'invitado';
  17.     }
  18. }
  19. else
  20. {
  21.     $user['rol'] = 'invitado';
  22. }
  23.  
  24. ?>

ya tenemos los roles ahora sera cuestion de la pagina los permisos que queramos darles por ejemplo para acceder a logout.php un usuario tiene que estar logueado por lo cual un invitado no podra leer el archivo no es logico que intente acceder un invitado a dicho archivo por lo cual solo tendran acceso usuarios y administradores

logout.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. if($user['rol'] == 'usuario' || $user['rol'] == 'administrador')
  4. {
  5.  
  6. // validar login
  7. // codigo de logout
  8.  
  9.  
  10. }else{
  11.  
  12. // denegado el acceso para cualquiera que no sea usuario o admnistrador
  13.  
  14. exit('no tienes acceso para ver la pagina');
  15.  
  16. }
  17.  
  18. ?>

no confundir los permisos con las validaciones de login , tambien hay que validar si el usuario es un usuario logueado

ahora otro ejemplo index.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. if($user['rol'] == invitado|| $user['rol'] == 'usuario' || $user['rol'] == 'administrador')
  4. {
  5.  
  6. // accesible para todos pero aqui se podria dividir contenido para usuarios o invitados
  7.  
  8. if($user['rol'] == 'usuario' || $user['rol'] == 'administrador')
  9. {
  10.  
  11. // contenido para supuestos logueados , por que aun habria que validarlos
  12.  
  13. }
  14. else
  15. {
  16.  
  17. // contenido para invitados
  18.  
  19. }
  20.  
  21. }
  22.  
  23. ?>

ahora si deseas dar pèrmisos de escritura deberas darselo solo a administradores

Código PHP:
Ver original
  1. <?php
  2.  
  3. if($user['rol'] == 'administrador')
  4. {
  5.  
  6. // contenido para escritura
  7.  
  8. }
  9.  
  10. ?>


observaciones : [U]no olvides dar los permisos en tus archivos y directorios en tu hosting [U]

Eso es todo sobre el capitulo 4 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 5

capitulos

1 - proteger directorios : link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - manejar errores : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159

Última edición por webankenovi; 17/04/2013 a las 10:13
  #46 (permalink)  
Antiguo 17/04/2013, 12:56
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 5

Verificacion de archivos

- Para asegurarnos que nuestros archivos no han sido modificados, vamos a realizar una comparacion de hashes para verificar que el archivo no ha sido alterado con codigo malicioso etc.....

existen varias formas pero yo me voy a centrar en 1 muy basica

1 - en el documento verificaremos que el hash proporcionado en el momento de la peticion es exactamente igual al hash que obtuvimos justo antes de la subida o al final la creacion de el lo que mas guste jejeje.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. // para obtener el hash realizamos sha1_file('index.php');  y lo guardamos en el archivo
  5.  
  6. // ahora antes ejecutar ningun codigo verificaremos dicho hash
  7.  
  8. if(sha1_file(realpath(__FILE__)) == 'DJSFVD8VD9HSD8VHD8FHSV98FDHV8HV') // HASH OBTENIDO PREVIAMENTE
  9. {
  10.  
  11. // contenido
  12.  
  13. }else{
  14.  
  15. exit('archivo corrupto');
  16.  
  17. }
  18.  
  19. ?>


Eso es todo sobre el capitulo 5 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 6

capitulos

1 - proteger directorios : link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275

Última edición por webankenovi; 17/04/2013 a las 13:07
  #47 (permalink)  
Antiguo 17/04/2013, 15:28
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: seguridad web

Estos últimos capítulos son muy interesantes, sigue así +1
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #48 (permalink)  
Antiguo 17/04/2013, 15:35
Avatar de HiToGoRoShi  
Fecha de Ingreso: abril-2008
Mensajes: 849
Antigüedad: 16 años, 8 meses
Puntos: 31
Respuesta: seguridad web

Solución a todo esto? aprender a usar un framework
  #49 (permalink)  
Antiguo 17/04/2013, 16:13
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Bueno lo que intento es orientar para tener unas nociones minimas , ya que cada dia veo muchisima gente que tiene mucho desconocimiento en estos temas y lo que se intenta es ayudar un poco a entenderlos , alomejor me equivoco en algunas cosas pero intento hacerlo y explicarlo lo mejor que puedo y de una forma que cualquiera lo pueda entender.

andresdzphp, intentare seguir asi si el tiempo me deja
  #50 (permalink)  
Antiguo 17/04/2013, 16:57
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Cita:
Iniciado por webankenovi Ver Mensaje
CAPITULO 5

Verificacion de archivos

- Para asegurarnos que nuestros archivos no han sido modificados, vamos a realizar una comparacion de hashes para verificar que el archivo no ha sido alterado con codigo malicioso etc.....

existen varias formas pero yo me voy a centrar en 1 muy basica

1 - en el documento verificaremos que el hash proporcionado en el momento de la peticion es exactamente igual al hash que obtuvimos justo antes de la subida o al final la creacion de el lo que mas guste jejeje.

Código PHP:
Ver original
  1. <?php
  2.  
  3.  
  4. // para obtener el hash realizamos sha1_file('index.php');  y lo guardamos en el archivo
  5.  
  6. // ahora antes ejecutar ningun codigo verificaremos dicho hash
  7.  
  8. if(sha1_file(realpath(__FILE__)) == 'DJSFVD8VD9HSD8VHD8FHSV98FDHV8HV') // HASH OBTENIDO PREVIAMENTE
  9. {
  10.  
  11. // contenido
  12.  
  13. }else{
  14.  
  15. exit('archivo corrupto');
  16.  
  17. }
  18.  
  19. ?>


Eso es todo sobre el capitulo 5 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 6

capitulos

1 - proteger directorios : link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275

RE-EDIT CAPITULO 5

Me equivoque en el script ya que el hash obtenido previamente nunca sera igual al has resultante al añadir el hash en el script despues de obtenerlo modificara el hash resultante y nunca coincidiran, por lo tanto hay que hacerlo desde fuera del archivo.

arreglo
Código PHP:
Ver original
  1. <?php
  2.  
  3. // hashes.php contendra los hash de los archivos
  4. // ejemplo
  5. // $hash_login = 'FG67uRFVCrtki875tr';
  6. // para obtenerlo y tenerlo codificado base64_encode(sha1_file('login.php'))
  7.  
  8. include 'hashes.php ';
  9.  
  10. if(sha1_file('login.php') == base64_decode($hash_login))
  11. {
  12. include 'login.php';
  13. }else{
  14.  
  15. exit('archivo corrupto');
  16.  
  17. }
  18.  
  19. ?>

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

CAPITULO 6

CONFIGURACION DE SESSIONES

- Ahora que ya tenemos mas o menos protegidos nuestros archivos y asignado un rol al usuario , vamos a configurar las sessiones

1 - configuremos las directivas de session

si no se tiene acceso al archivo php.ini deberemos modificarlo en tiempo de ejecucion

algunas directivas muy pocas no se comentan, no afectan .

Código PHP:
Ver original
  1. <?php
  2.  
  3. // ruta donde guardaremos los archivos creados.
  4. ini_set('session.save_path','ruta');
  5.  
  6. // nombre de la session que se usa como nombre de la cookie
  7. ini_set('session.name','por defecto PHPSESSID');
  8.  
  9. // inicia una session automaticamente
  10. ini_set('session.auto_start',false);
  11.  
  12. // contiene la subcadena para comprobar cada HTTP Referer. Si la Referencia fue enviada por el cliente y la subcadena no se encontró,
  13. // el id de sesión embebido será marcado como no válido
  14. ini_set('session.referer_check','');
  15.  
  16. // almacenar el id de session en una cookie en la parte del cliente
  17. ini_set('session.use_cookies',true);
  18.  
  19. // usar cookies para almacenar el id de sesión en la parte del cliente,
  20. // este ajuste previene ataques que impican pasar el id de sesión en la URL
  21. ini_set('session.use_only_cookie',true);
  22.  
  23. // tiempo de vida en segundos de la cookie que es enviada al navegador.
  24. ini_set('session.cookie_lifetime',0); // 0 por defecto hasta que se cierre el navegador
  25.  
  26. // especifica la ruta a establecer en la cookie de sesión. Por defecto es /.
  27. ini_set('session.cookie_path','ruta');
  28.  
  29. // especifica el dominio a establecer en la cookie de sesión
  30. ini_set('session.cookie_domain','dominio');
  31.  
  32. // especifica si las cookies deberían enviarse sólo sobre conexiones seguras, esto dependera de cada dominio
  33. ini_set('session.cookie_secure ',0);
  34.  
  35. // Marca la cookie como accesible sólo a través del protocolo HTTP. Esto siginifica que la cookie no será accesible por lenguajes de script, tales como JavaScript.
  36. // Este ajuste puede ayudar de manera efectiva a reducir robos de indentidad a través de ataques
  37. ini_set('session.cookie_httponly',1);
  38.  
  39. // especifica el método de control de caché usado por páginas de sesión
  40. ini_set('session.cache_limiter','nocache');
  41.  
  42. // especifica el tiempo de vida en minutos para las páginas de sesión examinada
  43. ini_set('session.cache_expire',valor deseado);
  44.  
  45. // si está habilitado sid transparente o no
  46. ini_set('session.use_trans_sid',0);
  47.  
  48. // directivas eliminadas en 5.4 en versiones inferiores desactivar
  49.  
  50. ini_set('session.bug_compat_warn',0);
  51. ini_set('session.bug_compat_42',0);
  52.  
  53. // algoritmo hash utilizado para generar los ID de sesión.
  54. ini_set('session.hash_function','algoritmo soportado'); // se puede obtener algoritmos soportados con la funcion hash_algo() , por defecto '0' md5 ,'1' sha-1
  55.  
  56. // especifica qué etiquetas HTML son reescritas para incluir el id de sesión si el soporte para sid transparente está habilitado,
  57. // desabilitandolo no incluiremos el id de session en las etiquetas a=href,area=href,frame=src,input=src,form=fakeentry,fieldset=
  58. ini_set('url_rewriter.tags',null);
  59.  
  60. ?>


Eso es todo sobre el capitulo 6 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 7

capitulos

1 - proteger directorios :link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link http://www.forosdelweb.com/f18/segur...ml#post4412596

Última edición por webankenovi; 23/04/2013 a las 14:52
  #52 (permalink)  
Antiguo 28/04/2013, 05:19
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 7

SESSION HIJACKING

- es tan solo un ejemplo sencillo que usted puede mejorar.

- login

// una vez verificado el usuario procedemos a crear una cadena para su verificacion en el caso de que le secuestren una session intentar proteger la cuenta del usuario en la medida de lo posible .
Código PHP:
Ver original
  1. $rand = rand();
  2. $token = hash('whirpool',session_id().$rand);
  3. $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);

// guardamos en la bd del usuario sus credenciales
// y guardamos en la cookie el rand

Código PHP:
Ver original
  1. setcookie("dmz_", base64_encode($rand));


comprobacion en todas las peticiones (paginas)

// antes deberemos verificar que el usuario esta logueado con la variable de session que usted haya creado para validar al usuario como logueado inmediatamente despues realizamos la 2 verificacion comprobara sus credenciales
Código PHP:
Ver original
  1. if(isset($_COOKIE['dmz_']))
  2.     {
  3.         $rand         = base64_decode($_COOKIE['dmz_']);
  4.         $token        = hash('whirpool',session_id().$rand);
  5.         $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);
  6.          
  7.         // realizamos una consulta en la bd y extraemos los credenciales guardados en el login y comparamos
  8.      
  9.         if($row['credenciales'] == $credenciales)
  10.         {
  11.             // si es correcto generamos un nuevo session id y un nuevo rand y volvemos a guardar los credenciales
  12.      
  13.             session_regenerate_id();
  14.             unset($_COOKIE['dmz_']);
  15.      
  16.             $rand            = rand();
  17.             $token          = hash('whirpool',session_id().$rand);
  18.             $credenciales = hash('whirpool', $_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_ACCEPT_LANGUAGE'].$token);
  19.      
  20.             // guardamos en la bd del usuario sus credenciales
  21.             // y guardamos en la cookie el rand
  22.      
  23.             setcookie("dmz_", base64_encode($rand));
  24.         }
  25.         else
  26.         {
  27.             exit('session hijacking');
  28.         }
  29.     }

Eso es todo sobre el capitulo 7 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 8

capitulos

1 - proteger directorios :link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link http://www.forosdelweb.com/f18/segur...ml#post4412596
6 - configuracion de sessiones : link http://www.forosdelweb.com/f18/segur...ml#post4416219
  #53 (permalink)  
Antiguo 01/05/2013, 09:29
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 8

HASH DE CONTRASEÑA

- Vamos a procedeer a registrar la contraseña hasheada en la bd en el momento del registro y despues en el login su posterior autentificacion

- que vamos a usar , pues vamos a usar crypt con el algoritmo blowfish

- El algoritmo Blowfish no puede ser aplicado en todos los sistemas. puedes revisar tu sistema con el siguiente codigo

Código PHP:
Ver original
  1. <?php
  2.  
  3. if (CRYPT_BLOWFISH == 1) {
  4.     echo "Yes";
  5. } else {
  6.     echo "No";
  7. }
  8. ?>

A partir de PHP 5.3.0 crypt , PHP contiene su propia implementación y la utilizará si el sistema carece de soporte para uno o varios de los algoritmos.


1 - registro, solo vamos a centrarnos en la pass los demas datos deberas tambien registrarlos en el mismo script pero eso no entra en este capitulo

Código PHP:
Ver original
  1. <?php
  2.  
  3. // validar datos del formulario, previamente
  4.  
  5. if(isset($_POST['password']))
  6. {
  7.  
  8. // como ejercicio se debera verificar que la contraseña tiene mas de 8 caracteres por lo menos una mayuscula y una minuscula algun numero y algunos signos que se permitan .
  9.  
  10. // tambien se debera exponer en el formulario de registro la re-pass es decir pass y re-pass ambas deben de coincidir
  11.  
  12. if($_POST['password'] != $_POST['re-password'] )
  13. {
  14. // las contraseñas no coinciden
  15. }
  16.  
  17.  
  18. $password = $_POST['password']; // password
  19. $algoritmo = '$2y$'; // blowfish
  20. $coste = '10'; // coste
  21. $salt= '$aquidebesponerelsalt$'; // el algoritmo coste y salt deberan ser el mismo en la pagina de validacion del login
  22. $hash = crypt($password,$algoritmo.$coste.$salt);
  23.  
  24. // guardamos la pass  $hash en la bd del usuario
  25.  
  26.  
  27. }
  28. ?>


2 - login

Código PHP:
Ver original
  1. <?php
  2.  
  3. // validar los datos , previamente
  4.  
  5. // extraer la pass del usuario de la bd y comparamos
  6.  
  7.  
  8. $password = $_POST['password']; // password
  9. $algoritmo = '$2y$'; // blowfish
  10. $coste = '10'; // coste
  11. $salt= '$aquidebesponerelsalt$'; // el algoritmo coste y salt deberan ser el mismo en la pagina de validacion del login
  12. $hash = crypt($password,$algoritmo.$coste.$salt);
  13.  
  14.  
  15. if ($hash == $database['password'])
  16. {
  17.     // acceso concedido
  18. }
  19. else
  20. {
  21.     // acceso denegado
  22. }
  23.  
  24. ?>


Eso es todo sobre el capitulo 8 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo .


Saludos nos vemos nuevamente con el capitulo 9

capitulos

1 - proteger directorios :link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link http://www.forosdelweb.com/f18/segur...ml#post4412596
6 - configuracion de sessiones : link http://www.forosdelweb.com/f18/segur...ml#post4416219
7 - session hijacking : link http://www.forosdelweb.com/f18/segur...ml#post4419281

Última edición por webankenovi; 01/05/2013 a las 09:36
  #54 (permalink)  
Antiguo 01/05/2013, 09:36
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 13 años, 4 meses
Puntos: 793
Respuesta: seguridad web

+1 Muy bueno el capítulo 8, también se puede almacenar el salt aparte y hacer algo así cierto?

Código PHP:
Ver original
  1. if (crypt($password, $data['salt']) == $data['password']) {
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #55 (permalink)  
Antiguo 01/05/2013, 09:40
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

gracias, se hace lo que se puede

Si claro si ves en el ejemplo

crypt($password,$algoritmo.$coste.$salt);

lo marcado en rojo esta almacenado fuera de la funcion, lo puse simple por hacerlo mas sencillo pero el salt deberia estar bastante protegido y fuera del alcance publico , aunque el salt lo guardes fuera no hay que olvidarse del algoritmo y el coste de lo contrario puede dar resultados inesperados
  #56 (permalink)  
Antiguo 01/05/2013, 09:46
 
Fecha de Ingreso: julio-2012
Ubicación: Ciudad de México
Mensajes: 44
Antigüedad: 12 años, 5 meses
Puntos: 2
Respuesta: seguridad web

Hola a todos, hace unos días yo en Taringa! hallé un post dónde exponían un pequeño código que al introducirlo lograbas vulnerar algunos sistemas de autentificación, ¡Y en efecto, funciona!

Desgraciadamente borraron el post pero el código se parecía a esto:
Cita:
OR"='
(no es el original, el original tenia signos que yo no puedo sacar con mi teclado)

¿Alguien me puede explicar como funciona?
__________________
Sígueme en Twitter: @SamyCanales
  #57 (permalink)  
Antiguo 01/05/2013, 09:54
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

tiene pinta de ser sql injection , de hecho si en la aplicacion en el momento del login no validan ningun dato o mal validados , proveniente del formulario estos se inyectan en la consulta y se puede tener acceso en el momento del login , ademas de muchas otras cosas informacion de la bd , contraseñas etc....

ese es un tema que se resuelve validando correctamente los datos de entrada escapando y usando sentencias preparadas y procedimientos almacenados.

en este post ay mucha informacion sobre sql injection y proximamente hare un capitulo sobre ello
  #58 (permalink)  
Antiguo 16/06/2013, 13:20
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 9

EVITAR INYECCION SQL MEDIANTE PDO

En este capitulo trataremos de evitar la inyeccion en nuestra base de datos, es tan solo un ejemplo basico (se deberia de mejorar) que espero sirva como guia.

!!! RECUERDEN !!!

mysql esta deprecado no deberia usarse en nuevos proyectos en su lugar PDO o mysqli, en proyectos que ya usaban mysql deberian de migrar.

Aqui dejo links de ayuda

PDO
http://es1.php.net/manual/es/book.pdo.php

CONEXION
http://es1.php.net/manual/es/pdo.connections.php

TRANSACIONES Y AUTO-COMMIT (no se habla en este capitulo de este tema)
http://es1.php.net/manual/es/pdo.transactions.php

SENTENCIAS PREPARADAS Y PROCEDIMIENTOS ALMACENADOS
http://es1.php.net/manual/es/pdo.pre...statements.php

ERRORES
http://es1.php.net/manual/es/pdo.error-handling.php


1 - Conexion

- La conexion se establece creando instancias de la clase PDO, no importa el controlador que se utilice, siempre se usara el nombre de la clase PDO.

- Si la aplicación no captura la excepción lanzada por el constructor de PDO, la acción predeterminada que toma el motor zend es la de finalizar el script y mostrar información de rastreo.
Esta información probablemente revelará todos los detalles de la conexión a la base de datos, incluyendo el nombre de usuario y la contraseña.
Es sumamente importante capturar esta excepción, ya sea explícitamente (con una sentencia catch) o implícitamente por medio de set_exception_handler().

Código PHP:
Ver original
  1. $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
  2. $usuario = 'usuario';
  3. $contraseña = 'contraseña';
  4.  
  5. try {
  6.  
  7.     $gbd = new PDO($dsn, $usuario, $contraseña);
  8.  
  9. } catch (PDOException $e) {
  10.  
  11.     print "¡Error!: " . $e->getMessage() . "<br/>";
  12.     die();
  13. }

2 - Sentencias preparadas y procedimientos almacenados

- Inserciones

Código PHP:
Ver original
  1. $sentencia = $gbd->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
  2.  
  3. $sentencia->bindParam(':name', $nombre);
  4. $sentencia->bindParam(':value', $valor);
  5.  
  6. $nombre = 'uno';
  7. $valor = 1;
  8. $sentencia->execute();

- Obtencion de datos

Código PHP:
Ver original
  1. $sentencia = $gbd->prepare("SELECT * FROM REGISTRY where name = ?");
  2.  
  3. if ($sentencia->execute(array($_GET['name'])))
  4. {
  5.   while ($fila = $sentencia->fetch())
  6.   {
  7.     print_r($fila);
  8.   }
  9. }


Tambien podemos crear un filtro antes de ejecutar una sentencia
Código PHP:
Ver original
  1. function filter($data,$filter)
  2. {
  3.     switch($filter)
  4.     {
  5.         case 'alpha';
  6.  
  7.         if( ! ctype_alpha($data)) // validar caracteres alfabeticos solamente  [A-Za-z]
  8.         {
  9.             exit('el valor contiene caracteres ilegales');
  10.         }
  11.  
  12.         return true;
  13.  
  14.         break;
  15.  
  16.         case 'alnum';
  17.  
  18.         if( ! ctype_alnum($data)) // validar caracteres alfanumericos solamente  [A-Za-z0-9]
  19.         {
  20.             exit('el valor contiene caracteres ilegales');
  21.         }
  22.  
  23.         return true;
  24.  
  25.         break;
  26.  
  27.         case 'digit';
  28.  
  29.         if( ! ctype_digit($data)) // validar caracteres numericos solamente  [0-9]
  30.         {
  31.             exit('el valor contiene caracteres ilegales');
  32.         }
  33.  
  34.         return true;
  35.  
  36.         break;
  37.  
  38.         // asi podriamos crear muchos mas filtros, para correos etc..........
  39.         // los mensajes de error se pueden personalizar o hacer cualquier otra cosa como mandarle a otra pagina funcion etc... tan solo es un ejemplo
  40.  
  41.     }
  42.  
  43. }


// unimos todo lo mencionado y obtenemos lo siguiente

Código PHP:
Ver original
  1. $dsn = 'mysql:dbname=testdb;host=127.0.0.1';
  2. $usuario = 'usuario';
  3. $contraseña = 'contraseña';
  4.  
  5. try {
  6.  
  7.     $gbd = new PDO($dsn, $usuario, $contraseña);
  8.  
  9. } catch (PDOException $e) {
  10.  
  11.     print "¡Error!: " . $e->getMessage() . "<br/>";
  12.     die();
  13. }
  14.  
  15.     // insercion
  16.  
  17.     $sentencia = $gbd->prepare(" INSERT INTO REGISTRY (nombre, edad) VALUES (:nombre, :edad)");
  18.  
  19.     $sentencia->bindParam(':nombre', $nombre);
  20.  
  21.     $sentencia->bindParam(':edad', $edad);
  22.  
  23.         $nombre = 'uno';
  24.         $edad = 1;
  25.  
  26.         $sentencia->execute(); // ejecutamos la sentencia
  27.  
  28.  
  29.         // obtencion de datos
  30.  
  31.         $sentencia = $gbd->prepare(" SELECT * FROM REGISTRY where nombre = ? ");
  32.  
  33.         $name = filter($_GET['nombre'],'alpha'); // verificacion del filtro
  34.  
  35.         if ($sentencia->execute($name)))
  36.         {
  37.             while($fila = $sentencia->fetch())
  38.             {
  39.                 print_r($fila);
  40.             }
  41.         }
  42.  
  43.     $gbd = null; // cerramos la conexion


Eso es todo sobre el capitulo 9 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo.


Saludos nos vemos nuevamente con el capitulo 10.

1 - proteger directorios :link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link http://www.forosdelweb.com/f18/segur...ml#post4412596
6 - configuracion de sessiones : link http://www.forosdelweb.com/f18/segur...ml#post4416219
7 - session hijacking : link http://www.forosdelweb.com/f18/segur...ml#post4419281
8 - hash de contraseñas : link http://www.forosdelweb.com/f18/segur...ml#post4421471

Última edición por webankenovi; 16/06/2013 a las 13:25
  #59 (permalink)  
Antiguo 29/06/2013, 14:59
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

Si alguien desea que toque algun tema en especial referente a seguridad solo tiene que decirlo y/o repasar alguna duda sobre los temas expuestos.

Si cres que existe algun error/sugerencia sobre algun tema igualmente te invito a que me lo cuentes para poder corregirlo y/o agregarlo (los ejemplos son basicos para que sirvan de orientacion).

Moderadores si existe algun problema en que haga doble post solo tienen que decirmelo, pero creo post diferentes para cada tema para que quede mas claro.
  #60 (permalink)  
Antiguo 04/07/2013, 15:10
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: seguridad web

CAPITULO 10

CROSS SITE REQUEST FORGERY

CSRF , digamos que es la capacidad para engañar a un usuario a que realice una accion sin su consentimiento, puede haber acciones de nivel bajo , cambiar idioma , cerrar la session etc... y mas serios como cambiar la contraseña , retirar fondos , cambio de direccion postal , compras etc........

Estos ataques suelen ser enviados a la victima mediante emails, redes sociales ,privados etc....

Para evitar este ataque y prevenir a los usuarios de falsas peticiones , vamos a generar un token de session generado en todas las peticiones.

A la practica pues....

1 mostrare un ejemplo vulnerable y despues veremos la implementacion del token

perfil.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. if(isset($_SESSION['USUARIO']))
  4. {
  5.     // contenido del perfil
  6.         echo 'Bienvenido "'.$_SESSION['USUARIO'].'"';
  7.     echo '<a href="logout.php">salir</a>';
  8. }
  9. else
  10. {
  11.      echo 'no tienes suficientes permisos para ver esta pagina';
  12. }
  13. ?>

logout.php (vulnerable)

Código PHP:
Ver original
  1. <?php
  2. echo 'Has cerrado la session';
  3. ?>

ejemplo de ataque

Código PHP:
Ver original
  1. <html>
  2.  <body>
  3.   <p>una imagen muy chula amigo!!</p>
  4.   <img src="logout.php" style="display: none;">
  5.  </body>
  6. </html>

directamente cerrariamos la session ya que la imagen envia una peticion al servidor para acceder a logout.php y en logout no hay ninguna validacion de que el usuario halla pedido cerrar session.

soluciones

perfil.php

Código PHP:
Ver original
  1. <?php
  2.  
  3. if(isset($_SESSION['USUARIO']))
  4. {
  5.     $_SESSION['TOKEN'] = sha1(uniqid(mt_rand().session_id(), true));
  6.  
  7.     // contenido del perfil
  8.     echo 'Bienvenido "'.$_SESSION['USUARIO'].'"';
  9.     echo '<a href="logout.php?token='.$_SESSION['TOKEN'].'">salir</a>';
  10. }
  11. else
  12. {
  13.     echo 'no tienes suficientes permisos para ver esta pagina';
  14. }
  15. ?>

logout.php


Código PHP:
Ver original
  1. <?php
  2.  
  3. if(isset($_SESSION['USUARIO']) and isset($_SESSION['TOKEN']) and isset($_GET['token']) and $_GET['token'] == $_SESSION['TOKEN'])
  4. {
  5.     echo 'Has cerrado la session';
  6. }
  7. else
  8. {
  9.     exit('CSRF');
  10. }
  11.  
  12. ?>

Una vez implementado el token el ejemplo de ataque no tendria ningun resultado ya no se cerraria la session evitando asi CSRF.

Bueno eso es todo espero que sriva de inspiracion para crear buenas defensas CSRF.

Eso es todo sobre el capitulo 10 , si sabes otras maneras o mejorar lo expuesto o solo deseas mostrar tu opinion por favor exponlo.


Saludos nos vemos nuevamente con el capitulo 11.

1 - proteger directorios :link http://www.forosdelweb.com/f18/segur...ml#post4410846
2 - mensajes de error : link http://www.forosdelweb.com/f18/segur...ml#post4412140
3 - archivo de configuracion : link http://www.forosdelweb.com/f18/segur...ml#post4412159
4 - permisos y roles : link http://www.forosdelweb.com/f18/segur...ml#post4412275
5 - verificacion de archivos : link http://www.forosdelweb.com/f18/segur...ml#post4412596
6 - configuracion de sessiones : link http://www.forosdelweb.com/f18/segur...ml#post4416219
7 - session hijacking : link http://www.forosdelweb.com/f18/segur...ml#post4419281
8 - hash de contraseñas : link http://www.forosdelweb.com/f18/segur...ml#post4421471
9 - inyeccion sql : link http://www.forosdelweb.com/f18/segur...ml#post4451398

Última edición por webankenovi; 06/07/2013 a las 12:34

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 02:38.