Archivos de la categoría ‘Ado.Net’

Una fallo de inyección de SQL (o SQL Injection en inglés) es …

…es una vulnerabilidad informática en el nivel de la validación de las entradas a la base de datos de una aplicación. El origen es el filtrado incorrecto de las variables utilizadas en las partes del programa con código SQL. Es, de hecho, un error de una clase más general de vulnerabilidades que puede ocurrir en cualquier lenguaje de programación o de script que esté incrustado dentro de otro.

Fuente

Según estadísticas publicadas por WhiteHack Security, los fallos de inyección de SQL y otro tipo de vulnerabilidades afectan a un gran número de sitios web, por lo que el uso de herramientas automatizadas que detecten posibles problemas de seguridad son más que recomendables.

En Security-Hacks, han publicado una lista de herramientas destinadas a encontrar y explotar vulnerabilidades de inyección de SQL.

  1. SQLIer
  2. SQLbftools
  3. SQL Injection Brute-forcer
  4. SQLBrute
  5. BobCat
  6. SQLMap
  7. Absinthe
  8. SQL Injection Pen-testing Tool
  9. SQID
  10. Blind SQL Injection Perl Tool
  11. SQL Power Injector
  12. FJ-Injector Framwork
  13. SQLNinja
  14. Automagic SQL Injector
  15. NGSS SQL Injector

Para evitar este tipo de ataques se debe hacer uso de consultas parametrizadas o funciones que el lenguaje de programación provea para este fin, en lo posible no debemos reinventar la rueda y hacer funciones que algunas veces no sirven de nada.

Anuncios

.NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software con énfasis en transparencia de redes, con independencia de plataforma y que permita un rápido desarrollo de aplicaciones. Basado en esta plataforma, Microsoft intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el Sistema Operativo hasta las herramientas de mercado.

.NET podría considerarse una respuesta de Microsoft al creciente mercado de los negocios en entornos Web, como competencia a la plataforma Java de Sun Microsystems.

A largo plazo Microsoft pretende reemplazar el API Win32 o Windows API con la plataforma .NET. Esto debido a que el API Win32 o Windows API fue desarrollada sobre la marcha, careciendo de documentación detallada, uniformidad y cohesión entre sus distintos componentes, provocando múltiples problemas en el desarrollo de aplicaciones para el sistema operativo Windows. La plataforma .NET pretende solventar la mayoría de estos problemas proveyendo un conjunto único y expandible con facilidad, de bloques interconectados, diseñados de forma uniforme y bien documentados, que permitan a los desarrolladores tener a mano todo lo que necesitan para producir aplicaciones sólidas.

(más…)

¿Quién no ha usado el SqlConnection, SqlAdapter, SqlDataReader?. ¿quién, no los uso desde el caja de herramientas?. Pero, ¿dónde estas estos controles en VS2005?
En principio iba a responder solo con los pasos, por unos pendientes que tengo, pero no puedo evitarlo voy hacer un how to, no tan detallado, pero con algunos pantallazos.

En este caso usaré Visual C# Express y SQL Express, sobre Windows Vista RC2. ¿por qué?, por que esas versiones estan al alcance de todos por ser gratuitas ;). Y obviamente son aplicables a las versiones superiores.

Ahora que estuve instalando SQL Express, me percate de una opción interesante, no se, si no la vi antes (en las versiones beta), o no tenía, y es la posibilidad de hacer una instalación avanzada.install_sql.jpg

Con una instalación avanzada, podemos configurar el nombre de instancia, en mi caso es .\miSQLExpress, pero si no tienen planeado instalar una versión superior de SQL, pueden usar la instancia por defecto, y para que, al conectarse solo pongan el nombre de equipo, (local), localhost, o sólo “.”.

Ah por cierto trabajaré con Adventure Works, la cuál se puede descargar desde esta página: SQL Server 2005 Samples and Sample Databases (July 2006).

Vamos a los pasos, supongo que ya tienen instalado AdventureWorks, Managment Studio Express, SQL Express, y C# Express:

  1. Creo mi aplicación Windows con C#.
  2. Agrego un nuevo conjunto de datos: dsAdventure.xsd.
  3. Ahora agrego una nueva coneción a mi base de datos, puedo escoger entre Access vía OleDB o SQL:

add_cn.jpg 4.- En el caso de los que han cambiado el nombre de la instacia por defecto (SQLExpress), el mio por ejemplo, al agregar la conexión hay que probarla, si obtenes error, hay que hacer clic en propiedades avanzadas, y cambiar el nombre de la instancia (por defecto viene con SQL Express), indepientemente que instancia le hayas puesto de nombre a tu servidor de base de datos. Ah por cierto se usará el modelo attach DB, en el cuál para la conexión no es necesario el nombre del server y la db, sino el archivo mdf, que esta dentro de la carpeta Data de MSSQL.

5.- Ahora arrastro una nueva tabla desde la conexión agregada, nos pedira agregar una conexión local dentro del proyecto, hacemos clic en SI o YES, depediendo del idioma de la instalación del Csharp Express (como se han habrán podido dar cuenta, tengo al versión en espaniol):

add_table.jpg
6.- Como pueden apreciar ahora el objeto a parte del dataset es el TableAdapter, que yo lo veo como un DataAdapter tipificado:
config_ta.jpg7.- Lo que es interesante es que que las consultas generadas de Insert, Update, Delete, y Select, la podemos cambiar por Store Procedures, además podemos personzalizar más el TableAdapter, agregando métodos de búsqueda, etc.
8.- Ahora a lo nuestro agregar la data, para esto abrimos el formulario, y mostramos los orígenes de datos, si no esta, lo hacemos desde el menú Data, Show DataSource, y en espaniol, Datos, Mostrar Orígenes de Datos:

add_data.jpg

9.- Ahora cambiamos la vista a Detalles, y arrastramos ProductCategory al formulario:
addtable_win.jpg10.- Antes de que digan wow…., ejecuten, no lo piensen tanto, no miren el código, solo ejecuten..
11.- Ahora si, digan wow… :

win_final.jpg

Ahora si, espero que todo haya quedado claro?, no prueben el update .

A los que probaron el update habrán notado que no hace update, en este punto deberían comerzar a silvar, y a pedir su plata. Pero tranquiloss…., todo esta bajo control, no hubiera publicado el post, si previamiente no hubiera soluciado esto, aunque tome varias horas, aunque no coma, aunque no…; según la regla Nº13 del manual buen programador, si vas hacer algo, hazlo bien, sino, mejor no lo hagas . Y nada, vamos, primero les explico que ha pasado, y después les explico como solucionarlo.

El problema se presenta, por el quicktranslate que hice de este post, que al momento de decir SI en el mensaje de arriba que les dije que pulsarán SI, lo que hace es adjuntar el archivo mdf a nuestro proyecto. ¿pero, eso es lo que debía hacer?. Aja, pero el problema es que la conexión agregada se queda referenciada a la ruta del archivo original (la carpeta Data de MSSQL). Y resumidamente ese es el problema.

La solución, “cuanto más tiempo te demore un problema, mayor es el éxtasis alcanzado al solucionarlo“:

  1. Tenemos que cambiar la cadena de conexión dentro del archivo de configuración de la aplicación, app.config, y en el datatable ProductCategory, esto lo hacemos desde el diseñor del dataSet. Lo reemplzamos por la actual ruta del archivo *.mdf adjuntado dentro de nuestra aplicación.
  2. Ejecutar nuevamente.
  3. Modificar un registro, ej., cambiar el nombre de la categoría a bicicleta.
  4. Cerrar.
  5. Volver a ejecutar.
  6. Y por último decir wow…:

win_final2.jpg

Con una versión de SQL, NO Express, no deberíamos tener este problema.

Cabe resaltar que esta, es una demo básica, nosotros podemos usar StoreProcedures, podemos extender la funcionalidad del TableAdapter dentro de una capa de Negocio, usando WebServices, y todo el tipo de cosas arquitectónicas que se les ocurran.

De más esta decir sobre todo lo que ha generado, los controles, la presentación, validaciones del tipo de dato, asignación del autonumerico, entre otras… es, siendo cualitativos, espectacular; y cuantitativos, es productivo.