SlideShare ist ein Scribd-Unternehmen logo
1 von 57
Seguridad en Programación vladimir  dot  calderon at gmail dot com (16 – mayo – 2009)
Programa ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
SQL INJECTION
SQL Injection ,[object Object],[object Object],Gestor de Base de Datos Cliente/Usuario
SQL : Tipos de comandos Comandos DCL (Data Control Language Statements) Cláusulas Comandos DML (Data Manipulation Language Statements) Comandos DDL (Data Definition Language Statements) Operadores de Comparación
SQL : Comandos Básicos Comandos DDL (Data Definition Language Statements) CREATE Utilizado para crear nuevas tablas, campos e índices. DROP Empleado para eliminar tablas e índices. ALTER Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos. Comandos DCL (Data Control Language Statements) GRANT Utilizado para otorgar permisos. REVOKE Utilizado para revocar permisos. DENY Utilizado para denegar acceso.
SQL : Comandos Básicos Comandos DML (Data Manipulation Language Statements) SELECT Utilizado para consultar registros de una base de datos que satisfagan un criterio determinado. INSERT Utilizado para cargar lotes de datos en la base de datos en una única posición. UPDATE Utilizado para modificar los valores de los campos y registros específicos. DELETE Utilizado para eliminar registros de una tabla de base de datos.
SQL Injection ,[object Object],[object Object]
Por qué hablar de SQL Injection? ,[object Object],[object Object],[object Object]
Esquema simplificado Web Server Firewall Database Server Usuario/Intruso Usuario/Intruso Internet App.Web App.Web App.Web App.Web
Típica página web sql = “SELECT * FROM users WHERE username = '" + usuario + "' AND userpass = '" + clave + "' "
Comilla Simple : Single Quote ,[object Object],[object Object],SELECT * FROM users WHERE username =  ‘ ‘ '  AND userpass = ‘xx123'
Objetivos SQL Injection ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Pasando la autenticación ,[object Object],[object Object],[object Object],[object Object],[object Object],' or 1=1-- admin ' -- ' OR '' = '' --
Evadiendo la autenticación ,[object Object],SELECT * FROM users WHERE username =  ''   OR '' = ''--  AND userpass = '' SELECT * FROM users WHERE username =  ' admin '   --   AND userpass = '' ,[object Object],[object Object],SELECT * FROM users WHERE username =  ''  or 1=1-- '   AND userpass = '' ,[object Object]
Evitando SQL Injection ,[object Object],[object Object],[object Object],[object Object],[object Object]
SQL Injection .vs. PHP ,[object Object],<?php settype($offset, 'integer'); $consulta = &quot;SELECT id, nombre FROM productos  &quot; ; $consulta .= &quot;LIMIT 20 OFFSET %d;&quot;; // note el simbolo %d en la cadena de formato // usar %s no tendría sentido $consulta = sprintf($consulta, $offset); ?>
SQL Injection .vs. PHP ,[object Object],<?php $query = &quot;INSERT INTO usuarios(nombre,contr) VALUES('%s','%s');“; $consulta = sprintf($query,  pg _escape_string($nombre_usuario), md5($contrasenya)); $resultado =  pg _query($conexion, $consulta); $query = &quot;SELECT 1 FROM usuarios WHERE nombre='%s' AND contr='%s';“; $consulta = sprintf($query, pg _escape_string($nombre_usuario),  md5($contrasenya)); $resultado =  pg _query($conexion, $consulta); ?>
SQL Injection .vs. ASP.NET ,[object Object],string query= &quot;select * from Customers where city = @City“; SqlCommand  cmd  = new SqlCommand(query, conn);  SqlParameter param =  new SqlParameter();  param.ParameterName = &quot;@City&quot;; param.Value = inputCity;  cmd.Parameters.Add(param);   SqlDataReader reader = cmd.ExecuteReader();
SQL Injection .vs. JAVA ,[object Object],String query =  &quot;Select favorita from comida where gato = ?“; PreparedStatement preparedStatement = connection.prepareStatement(query);  preparedStatement.setString(1, “mufasa&quot;);   ResultSet resultSet = preparedStatement.executeQuery();  while (resultSet.next()) {  System.out.println(“La comida favorita de mufasa &quot; + resultSet.getString(1));  }
CODE EXPLOITS
Qué es un exploit? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Tipos de vulnerabilidades ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Algo de terminología ,[object Object],[object Object],[object Object],[object Object]
Un poco más de terminología ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Llamado a una función en C ,[object Object],Int main(int argc,  char* argv[]) { char buffer[256]; if (argc != 2) exit(1);
Llamado a una función en C ,[object Object],strcpy(buffer, argv[1]); return 0; }
Overflow y Memoria ,[object Object],[object Object],[object Object],[object Object],[object Object]
Cómo se %$&! la memoria
Qué puede ocurrir? ,[object Object],[object Object],[object Object]
En la práctica ,[object Object],void trucho (void) {  char small[30];  gets  (small);  printf(&quot;%s&quot;, small);  }  int main() {  trucho ();  return 0;  }
Mostrando la vulnerabilidad ,[object Object],[object Object]
Busquemos las direcciones (GDB) ,[object Object]
La función trucho() ,[object Object]
Cómo vemos el overflow? ,[object Object]
Modificando la dirección ,[object Object],main() {  int i=0;  char buf[44];  for (i=0;i<=40;i+=4)  *(long *) &buf[i] =  0x84130804 ;  puts(buf);  }
Viendo el resultado ,[object Object],[object Object]
Shellcode ,[object Object],[object Object],[object Object],static char shellcode[]= &quot;eb175e89760831c088460789460cb00b89f38d&quot; &quot;4e0831d2cd80e8e4ffffff2f62696e2f736858&quot;;
Finalmente ,[object Object],[object Object],[object Object],[object Object],[object Object]
Programación Defensiva
Por qué? ,[object Object],[object Object],NO VERIFICACION de los parámetros de ENTRADA y SALIDA de las funciones de nuestros programas   12.2.1: El insumo de data en las aplicaciones debe ser validado para asegurar que esta data sea correcta y apropiada. 12.2.2, 12.2.3 y 12.2.4: Que no hayan errores, integridad y validar output.
Políticas de programación ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Logging ,[object Object],[object Object],[object Object],[object Object]
Ejemplo Logging (log4net) protected void Logon_Click(object sender, EventArgs e) { log.Info (&quot;Trata de autenticarse: &quot; + UserEmail.Text + &quot;/********&quot;); if (verificar(UserEmail.Text, UserPass.Text)) { log.Info (&quot;Usuario autenticado&quot;); …  // redirección o a Inicio } else { log.Error (&quot;Usuario &quot; + UserEmail.Text + &quot;/&quot; + UserPass.Text + &quot; incorrectos&quot;); Msg.Text = &quot;Nombre o Clave de Usuario son inválidos, o el usuario ha sido dado de baja&quot;; } }
Revisión de Pares ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Try / catch ,[object Object],try { File f = new File(“algo.txt”); FileReader fr =  new FileReader(f); } catch { log.error(“Algo pasó”); } File f = null; FileReader fr = null; try { f = new File(“algo.txt”); } catch(Exception e) { log.error(“error”, e); } try { fr = new FileReader(f); } catch(Exception e) { log.error(“error”, e); }
Beneficios en producción ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Generadores de código Una pequeña aplicación con una DAO
Objetivo ,[object Object],[object Object],[object Object],[object Object],[object Object]
Modelo base ,[object Object],[object Object]
Modelo base – Abstract Factory
Resultado esperado ,[object Object],[object Object],[object Object],Factory factory = Factory.getOrCreate(); PersonaDAO dao = factory.nuevoPersonaDAO(); Persona dto = dao.seleccionar(4); dto.Nombre = “pedro”; dao.actualizar();
Modelo extensible Objeto
Modelo extensible DAO
Generando…
Et voilà!! FactoryDAO factory = FactoryDAO.Instancia; PersonaDAO dao = factory.newPersonaDAO(); Persona dto = dao.nuevo(); dto.Nombre = txtNombre.Text; dto.Numero = Convert.ToInt32(txtNumero.Text); dto.Salario = Convert.ToDouble(txtSalario.Text); dao.actualizar();
MUCHAS GRACIAS

Weitere ähnliche Inhalte

Was ist angesagt? (20)

Php03 variables externas
Php03 variables externasPhp03 variables externas
Php03 variables externas
 
Introducción a php
Introducción a phpIntroducción a php
Introducción a php
 
Seguridades asp.Net
Seguridades asp.NetSeguridades asp.Net
Seguridades asp.Net
 
Curso php y_mysql
Curso php y_mysqlCurso php y_mysql
Curso php y_mysql
 
Php basico
Php basicoPhp basico
Php basico
 
Especialista Web J9 Php
Especialista Web J9  PhpEspecialista Web J9  Php
Especialista Web J9 Php
 
Php02 fundamentos de php
Php02 fundamentos de phpPhp02 fundamentos de php
Php02 fundamentos de php
 
Php08 mantenimiento tablas
Php08 mantenimiento tablasPhp08 mantenimiento tablas
Php08 mantenimiento tablas
 
Php Basico
Php BasicoPhp Basico
Php Basico
 
Php05 funciones usuario
Php05 funciones usuarioPhp05 funciones usuario
Php05 funciones usuario
 
Php
PhpPhp
Php
 
Manual php completo by_ desarrolloweb
Manual php completo by_ desarrollowebManual php completo by_ desarrolloweb
Manual php completo by_ desarrolloweb
 
Php basico y avanzado
Php basico y avanzadoPhp basico y avanzado
Php basico y avanzado
 
Php1 sesión 6
Php1 sesión 6Php1 sesión 6
Php1 sesión 6
 
Php1
Php1Php1
Php1
 
Introducción a PHP
Introducción a PHPIntroducción a PHP
Introducción a PHP
 
PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01
 
Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2Javascript es6-ejercicios-resueltos-parte-2
Javascript es6-ejercicios-resueltos-parte-2
 
Php1
Php1Php1
Php1
 
Php1
Php1Php1
Php1
 

Andere mochten auch

GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 IIGERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
Alumnos Ricardo Palma
 
03 administração (fayolismo)
03   administração (fayolismo)03   administração (fayolismo)
03 administração (fayolismo)
Elizeu Ferro
 
A un olmo seco.alicia y sara
A un olmo seco.alicia y saraA un olmo seco.alicia y sara
A un olmo seco.alicia y sara
jjdoriga
 

Andere mochten auch (20)

GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 IIGERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
GERENCIA EN SALUD Clase 5 A 5 B Urp 2008 II
 
En la exploración petrolera, la aplicación de la palinología y la geoquímica ...
En la exploración petrolera, la aplicación de la palinología y la geoquímica ...En la exploración petrolera, la aplicación de la palinología y la geoquímica ...
En la exploración petrolera, la aplicación de la palinología y la geoquímica ...
 
Arte romano
Arte romanoArte romano
Arte romano
 
A1 first level activity 1 creating your profile
A1 first level activity 1 creating your profileA1 first level activity 1 creating your profile
A1 first level activity 1 creating your profile
 
Sistema
SistemaSistema
Sistema
 
Bmfciv494m
Bmfciv494mBmfciv494m
Bmfciv494m
 
03 administração (fayolismo)
03   administração (fayolismo)03   administração (fayolismo)
03 administração (fayolismo)
 
PROJECT REPORT ON EMPLOYEE SATISFACTION (sample)
PROJECT REPORT ON EMPLOYEE SATISFACTION (sample)PROJECT REPORT ON EMPLOYEE SATISFACTION (sample)
PROJECT REPORT ON EMPLOYEE SATISFACTION (sample)
 
The Second Machine Age: An Industrial Revolution Powered by Digital Technologies
The Second Machine Age: An Industrial Revolution Powered by Digital TechnologiesThe Second Machine Age: An Industrial Revolution Powered by Digital Technologies
The Second Machine Age: An Industrial Revolution Powered by Digital Technologies
 
A un olmo seco.alicia y sara
A un olmo seco.alicia y saraA un olmo seco.alicia y sara
A un olmo seco.alicia y sara
 
Contabilidad ii. dinamica de las cuentas
Contabilidad ii. dinamica de las cuentasContabilidad ii. dinamica de las cuentas
Contabilidad ii. dinamica de las cuentas
 
Inf 4 cristalizacion
Inf 4 cristalizacionInf 4 cristalizacion
Inf 4 cristalizacion
 
Cadernão raciocínio lógico resolvido
Cadernão raciocínio lógico resolvidoCadernão raciocínio lógico resolvido
Cadernão raciocínio lógico resolvido
 
Rococo2
Rococo2Rococo2
Rococo2
 
Padrões de aptidão do enfermeiro forense
Padrões de aptidão do enfermeiro forensePadrões de aptidão do enfermeiro forense
Padrões de aptidão do enfermeiro forense
 
淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08
 
Modelo pasos proceso disciplinario 2011 2012
Modelo pasos proceso disciplinario 2011 2012Modelo pasos proceso disciplinario 2011 2012
Modelo pasos proceso disciplinario 2011 2012
 
La participacion de los padres en los habitos de estudio
La participacion de los padres en los habitos de estudioLa participacion de los padres en los habitos de estudio
La participacion de los padres en los habitos de estudio
 
El monitoreo de campos electromagnéticos generado por infraestructura TIC en ...
El monitoreo de campos electromagnéticos generado por infraestructura TIC en ...El monitoreo de campos electromagnéticos generado por infraestructura TIC en ...
El monitoreo de campos electromagnéticos generado por infraestructura TIC en ...
 
Competencias disciplinares
Competencias  disciplinaresCompetencias  disciplinares
Competencias disciplinares
 

Ähnlich wie Seguridad En Programación

Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
csaralg
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntu
David Vevelas
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
1 2d
 
Bases Datos en java
Bases Datos en javaBases Datos en java
Bases Datos en java
jent46
 
APLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALESAPLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALES
Darwin Durand
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
octabio
 

Ähnlich wie Seguridad En Programación (20)

Inyección_sql
Inyección_sqlInyección_sql
Inyección_sql
 
Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos Mejores prácticas desarrollo de base de datos
Mejores prácticas desarrollo de base de datos
 
Inyecciones sql para todos
Inyecciones sql para todosInyecciones sql para todos
Inyecciones sql para todos
 
Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2Rendimiento en aplicaciones web con Symfony2
Rendimiento en aplicaciones web con Symfony2
 
Instalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntuInstalacion de Postrgre sql en ubuntu
Instalacion de Postrgre sql en ubuntu
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmp
 
Notas clase java ii
Notas clase java iiNotas clase java ii
Notas clase java ii
 
Servicios web
Servicios webServicios web
Servicios web
 
Inyecciones SQL
Inyecciones SQLInyecciones SQL
Inyecciones SQL
 
Java y Bases de Datos
Java y Bases de DatosJava y Bases de Datos
Java y Bases de Datos
 
Java y Bases Datos
Java y Bases DatosJava y Bases Datos
Java y Bases Datos
 
Bases Datos en java
Bases Datos en javaBases Datos en java
Bases Datos en java
 
APLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALESAPLICACIONES EMPRESARIALES
APLICACIONES EMPRESARIALES
 
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
Descubriendo Ruby on Rails (Desarrollo Agil de Aplicaciones Web)
 
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
Descubriendo Ruby On Rails (Desarrollo Agil De Aplicaciones Web)
 
Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0Seguridad Base de Datos sql injection v1.0
Seguridad Base de Datos sql injection v1.0
 
Script
ScriptScript
Script
 
Especialista Web J13: Introducción a Asp.Net
Especialista Web J13: Introducción a Asp.NetEspecialista Web J13: Introducción a Asp.Net
Especialista Web J13: Introducción a Asp.Net
 
Reglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows VistaReglas de Oro para el Desarrollo con Windows Vista
Reglas de Oro para el Desarrollo con Windows Vista
 
tutorial de slide.com
tutorial de slide.comtutorial de slide.com
tutorial de slide.com
 

Kürzlich hochgeladen

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Kürzlich hochgeladen (15)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 

Seguridad En Programación

  • 1. Seguridad en Programación vladimir dot calderon at gmail dot com (16 – mayo – 2009)
  • 2.
  • 4.
  • 5. SQL : Tipos de comandos Comandos DCL (Data Control Language Statements) Cláusulas Comandos DML (Data Manipulation Language Statements) Comandos DDL (Data Definition Language Statements) Operadores de Comparación
  • 6. SQL : Comandos Básicos Comandos DDL (Data Definition Language Statements) CREATE Utilizado para crear nuevas tablas, campos e índices. DROP Empleado para eliminar tablas e índices. ALTER Utilizado para modificar las tablas agregando campos o cambiando la definición de los campos. Comandos DCL (Data Control Language Statements) GRANT Utilizado para otorgar permisos. REVOKE Utilizado para revocar permisos. DENY Utilizado para denegar acceso.
  • 7. SQL : Comandos Básicos Comandos DML (Data Manipulation Language Statements) SELECT Utilizado para consultar registros de una base de datos que satisfagan un criterio determinado. INSERT Utilizado para cargar lotes de datos en la base de datos en una única posición. UPDATE Utilizado para modificar los valores de los campos y registros específicos. DELETE Utilizado para eliminar registros de una tabla de base de datos.
  • 8.
  • 9.
  • 10. Esquema simplificado Web Server Firewall Database Server Usuario/Intruso Usuario/Intruso Internet App.Web App.Web App.Web App.Web
  • 11. Típica página web sql = “SELECT * FROM users WHERE username = '&quot; + usuario + &quot;' AND userpass = '&quot; + clave + &quot;' &quot;
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29. Cómo se %$&! la memoria
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 41.
  • 42.
  • 43.
  • 44. Ejemplo Logging (log4net) protected void Logon_Click(object sender, EventArgs e) { log.Info (&quot;Trata de autenticarse: &quot; + UserEmail.Text + &quot;/********&quot;); if (verificar(UserEmail.Text, UserPass.Text)) { log.Info (&quot;Usuario autenticado&quot;); … // redirección o a Inicio } else { log.Error (&quot;Usuario &quot; + UserEmail.Text + &quot;/&quot; + UserPass.Text + &quot; incorrectos&quot;); Msg.Text = &quot;Nombre o Clave de Usuario son inválidos, o el usuario ha sido dado de baja&quot;; } }
  • 45.
  • 46.
  • 47.
  • 48. Generadores de código Una pequeña aplicación con una DAO
  • 49.
  • 50.
  • 51. Modelo base – Abstract Factory
  • 52.
  • 56. Et voilà!! FactoryDAO factory = FactoryDAO.Instancia; PersonaDAO dao = factory.newPersonaDAO(); Persona dto = dao.nuevo(); dto.Nombre = txtNombre.Text; dto.Numero = Convert.ToInt32(txtNumero.Text); dto.Salario = Convert.ToDouble(txtSalario.Text); dao.actualizar();