Tienda Online / Ecommerce para ERP con SQL Server

sqlserverweb4x4
Estándar

Casi la totalidad de los sistemas de ecommerce actuales están basados en plataformas Open Source, tanto en el Front / Back, como en el motor de base de datos usado para los mismos. Lo mas común son sistemas sobre PHP (ya sea con Frameworks tipo Symfony o parecidos) entre los cuales tenemos Prestashop, Magento, y plugins para CMS como WooCommerce o VirtueMart, que funcionan sobre MySQL.

¿Pero que sucede con las tiendas que ya manejan un ERP sobre SQL Server y quieren vender online?. Al contrario que en el mundo digital, en el ámbito de las aplicaciones de gestión o ERP´s, las soluciones que trabajan con SQL Server son numerosas.  En este caso si el ERP ya tiene un modulo de ecommerce, lo normal es que la empresa opte por esta opción, pero no todas lo tienen , y en este caso existen otras opciones en las que Web4x4 puede ayudarte en tu negocio.

Como expertos en desarrollos de ecommerce hemos desarrollado varias plataformas propias, una sobre ASP clásico, y otra mas actual desarrollada en C# (que lanzaremos dentro de unos meses). En todos los casos nuestros desarrollos de ecommerce se realizan usando SQL Server como motor de base de datos. Para pymes existe una version SQL Server “Express” gratuita y que proporciona las funcionalidades adecuadas para cualquier ecommerce normal, lo que hace que el precio respecto a una opción Open Source sea muy parecido. En nuestro caso al igual que otras consultoras con Prestashop o Magento, lo que cobramos es la configuración e inicialización de la tienda online.

Pero ademas de estas plataformas propias podemos desarrollar sistemas de ecommerce “ad-hoc” para empresas que tengan su ERP sobre SQL Server, usando nuestro conocimiento y experiencia en entornos complejos Microsoft. Podemos generar un ecommerce que se integre de manera transparente con el ERP de tal forma que el negocio se beneficie de la venta online sin tener que cambiar su aplicación de gestión.

¿Te imaginas poder tener las ordenes de pedido de manera automática en tu ERP desde tu tienda online? Eso solo es la punta del iceberg: Clientes, Productos, Facturas, Estadísticas, etc, todo lo que puedas pedir es susceptible de integración, siempre que la base de datos sea legible.

La productividad y la información son 2 puntos clave en los negocios del siglo XXI y la integración de todas las plataformas de venta es algo imprescindible para un negocio moderno.

Si quieres mas información escríbenos a david.moral@web4x4.es o llámanos al 628 81 89 89

 

Novedades en Access 2016

Access 2016
Estándar

Tell me en Access 2016

Ahora los usuarios pueden crear formularios, consultas, informes y tablas fácilmente con la ayuda de la función TellMe integrado en la barra de búsqueda de aplicaciones. Puesto que esta función es el reemplazo moderno del antiguo asistente “Clippy”, se puede conseguir fácilmente la ayuda que necesita haciendo clic o pulsando el signo de interrogación y escribir su consulta en el cuadro de búsqueda en la esquina superior derecha de la aplicación.

Plantillas modernizadas en Access 2016

Acceso 2016 ha modernizado y simplificado las plantillas disponibles. Esto significa que ahora es más fácil para crear bases de datos y convertirlas en impresionantes aplicaciones personalizadas, sin necesidad de conocimientos en programación. Se puede acceder fácilmente a la página de plantillas y elegir el modelo adecuado con el que se desea trabajar desde la pantalla de inicio.

Tenga en cuenta que si ya se encuentra dentro de la aplicación y desea abrir una nueva plantilla, haga clic en la ficha Archivo en la esquina superior izquierda de la aplicación.

Temas en Access 2016

Si no está satisfecho con el color de la cinta en la parte superior de la aplicación Access, puede optar por cambiar a fondos gráficos blancos al igual que en la version 2013. Puede hacer clic en Archivo > Opciones > General y elegir el estilo que se adapte a sus necesidades.

Exportación de datos de Access 2016

Ahora tiene la posibilidad de exportar sin esfuerzo todos los datos a Microsoft Excel 2016. Esta característica es especialmente útil si usted tiene una gran cantidad de datos con enlaces desde varias fuentes diferentes. Excel creará una lista de los enlaces de datos y ordenara por tipo para usted para que bases de datos muy grandes sean mucho más fácil de manejar. Para acceder a la función de exportación, haga clic en la ficha Datos externos y, a continuación, haga clicen el botón Administrador de tablas vinculadas. Aparecerá una ventana emergente; seleccionar todos los enlaces correspondientes y haga clic en el botón Exportar a Excel a la derecha.

Tan pronto como SharePoint 2016 este publicado, tendrá la capacidad de exportar muchas de las características de Access a SharePoint 2016.

Formularios mas grandes

Ahora en Access 2016 las barras laterales y las ventanas emergentes pueden utilizar la relación de tamaño de la aplicación en su beneficio. Se puede ver más listas de tablas y nombres de consulta en la base de datos sin mucho movimiento en sentido vertical o en la navegación de pestañas.

Feedback y cambios

Dado que el nuevo paquete Office es colaborativo “en vivo” entre el conjunto de aplicaciones, la retroalimentación es importante y afecta el desarrollo de las características que se añadirán a la suite de Office en forma de cambios. Si desea ver mejoras en características, haga clic en la cara sonriente en la esquina superior derecha y explicar en detalle lo que le gustaría ver cambiado.

Pros y contras de Access como base de datos

statistics-access-2010 (1)
Estándar

Siempre se habla de la base de datos Access como la hermana pobre de SQL Server, y aunque, para entornos empresariales muy fuertes si recomiendo otro tipo de motor de SQL, en Pymes de menos tamaño o autonomos el uso de Access puede ser recomendable para empezar a gestionar la informacion del negocio a través de una base de datos relacional. Os cuento algunos pros y contras de Access.

Localización de los datos

En primer lugar, todos los datos estarian dentro de un solo archivo, que se mantiene por el propio Access. Esto permite una solución de copia de seguridad simple. También permitiría cargar o descargar las bases de datos de Access sobre la marcha y por ejemplo, combinar dos bases de datos en una sola.

Desarrollo en el propio IDE de Access (VBA)

Access es más que una base de datos. También cuenta con un entorno de programación completa que es fácil de aprender para los no desarrolladores (VBA). Estos programas también serían parte de la base de datos de Access y por lo tanto podría ser utilizado por un usuario local, mientras que si se usa en entorno web, la aplicación web también tiene acceso a los mismos datos.

Access es a menudo parte de proyectos heredados. Podría haber algo más que datos dentro del archivo de Access. También es posible que otras aplicaciones utilicen la misma base de datos para cualquier propósito. Tiene un rendimiento muy bueno, si sabes lo que estás haciendo.

Multiusuario limitado

El mayor inconveniente sería un entorno multi-hilo. Y el desarrollo web, básicamente, es un entorno de múltiples subprocesos. Hay un gran riesgo de bloquear registros ya que si un usuario está actualizando los datos , otros usuarios no pueden acceder a este. En un entorno multiusuario, también hay un mayor riesgo de corrupción de datos. Pero dado que las bases de datos Access tienden a ser razonablemente pequeñas y compactas, no es un gran problema para hacer copias de seguridad periódicas para evitar este tipo de problemas.

Precio

Access en sí mismo es gratuito. Sólo se paga por Access al comprar Office.

Mover la aplicación

Aún más interesante, si el sistema ya tiene la configuración ADO apropiada / o controladores ODBC instalados, y son muy comunes, a continuación, se puede implementar una aplicación que utiliza Acces simplemente copiando el ejecutable a una nueva ubicación.La aplicación puede crear una nueva base de datos sobre la marcha, llenarlo con los datos por defecto y ya está! Es muy fácil de usar, en comparación con otras alternativas.

Bases de Datos empresariales

Usted podría considerar trabajar con SQL Server o MySQL como alternativas, pero requieren una configuración adecuada y deberían estar alojadas en algún servidor, aunque SQL Server se puede utilizar de una manera similar a Access en la version Express. Si piensa un cambio de base de datos, sugiero un cambio a SQL Server, ya que es totalmente compatible con Access.

Trabajo en web

Puede mover el archivo Access a una ubicación central (equipo o servidor), construir una interfaz web (tal vez en la intranet de la empresa) en ASP.NET utilizando un proveedor de datos específico para Access. La conexión con la base de datos sería esencialmente conexión de un usuario Si usted está pensando una solución empresarial tendrá que desarrollar la aplicación de todos modos.

Si el uso incluye cientos de usuarios, es muy probable que se encuentre con una serie de problemas con Access, pero al menos tiene la mitad del problema abordado y sólo necesita cambiar el código del proveedor de datos en ASP.NET para adaptarse a una solucion empresarial como SQL Server.
 
 
Si estas interesado en mantener tus aplicaciones Access o piensas en una migración a SQL Server mira nuestros servicios profesionales desde Web4x4.es
david.moral@web4x4.es – 628 81 89 89
 
 

Servicios Outsourcing de Bases de Datos

Estándar

Que importante es tener un especialista al que acudir cuando tenemos un problema.

En el caso del desarrollo web, una persona no puede saber de todo, y en un equipo tambien en muchas ocasiones hay carencias en cuanto a los conocimientos y habilidades de cada miembro. Por eso, es tan importante conocer las propias limitaciones, y buscar ayuda en el momento adecuado, no por ello tu servicio deja de ser bueno, al contrario, es mejor, porque le ofreces a tu cliente la posibilidad de una mejor atencion y conocimientos especializados.

En nuestro caso, hemos encontrado una empresa que nos presta ayuda en el ámbito de las bases de datos. Damoin Web Services tiene un equipo preparado para gestionar bases de datos en un nivel técnico alto, pero tambien existen las excepciones y proyectos que superan nuestra capacidad técnica. Para compensarlo buscamos la mejor empresa posible que nos apoye en momentos de crisis o proyectos mas intensos. Os queremos presentar a GPS Open Source.

Desde GPS Open Source ofrecen servicios de consultoría/mantenimiento de  bases de datos en entornos empresariales.

Consultoría Oracle – Consultoría MySQL – Consultoría SQL Server – Consultoría Sybase

Su portfolio se dirige a compañías medianas y grandes que requieren de un proveedor especializado y de confianza. Un socio para abordar proyectos que exigen experiencia y conocimiento en entornos de bases de datos , ya sea Oracle, MySQL, SQL Server o Sybase.

Los consultores y tecnicos de GPS Open Souce cuentan con un amplio bagaje en la administración de bases de datos en entornos críticos y han participando y liderado proyectos de migración e implantación de bases de datos para grandes compañías. Su aportación parte de esa especialización y se hace fuerte desde el compromiso y el esfuerzo como garantía de éxito.

Su valor como socio en entornos de base de datos

El objetivo principal de GPS Open Source es convertirse en un proveedor cercano a sus socios y clientes. Una empresa capaz de ofrecer la confianza suficiente para dejar en sus manos proyectos y áreas importantes de sus activos informáticos. Un proveedor, en definitiva, que forma parte de su Departamento IT como un equipo más de técnicos especializados y comprometidos con el objetivo de su empresa.

 

Evitar ataques SQL Injection en IIS7 con SQL Server

Estándar

En este post hablaremos sobre un tema que interesa a cualquiera que desarrolle o trabaje con bases de datos en una aplicación web, los ataques con inyección SQL.

¿Que es un ataque con inyección SQL (SQL injection)?

En principio los ataques SQL injection son combinaciones de técnicas para conocer datos sobre la configuración de un servidor web y de su base de datos, de forma que, de manera mas o menos directa, se pueda conseguir acceso a la misma, para usarla en beneficio del atacante, bien borrando datos, copiandolos y vendiendolos posteriormente o manipulandolos para conseguir algún objetivo, como puede ser la propagación de un virus desde esa misma página.

Los ataques consisten en la adición de sentencias SQL especiales que, ejecutadas en el servidor, le den al atacante información tecnica sobre la base de datos y posteriormente acceso de algún tipo.

¿Son evitables todos los ataques  SQL Injection?

Un servidor web publico siempre podrá ser accedido por cualquier usuario que acceda a la página o conecte a través de un programa informático, con lo que siempre estará expuesto. Incluso en servidores internos de redes empresariales podemos tener problemas con cualquier usuario, por eso son importantes el uso de todas las técnicas que vamos a ver en este post.

Es probable que nos dejemos alguna ya que vamos a hablar sobre servidores IIS y SQL Server, podeis dejar vuestras aportaciones en los comentarios si teneis alguna para otras bases de datos o servidor web.

¿Cualquier base de datos es susceptible de un ataque SQL Injection?

En principio las mas usadas en aplicaciones web como Mysql, Oracle, SQL Server y Access (increible que todavia se use para webs) son susceptibles de ser atacadas para conseguir el acceso, cada una con sus diferentes sintaxis, pero en general las técnicas son similares.

Técnicas de defensa ante ataques SQL Injection

1. Páginas de error personalizadas

No hay que ponerselo fácil a los atacantes de nuestras webs.

Al principio de un ataque se usan diferentes sentencias para que la página proporcione errores de sintaxis al intentar ejecutarlas y de esa manera conocer que versión de base de datos usa nuestra aplicación, para ser más precisos en las siguientes oleadas. Si queremos ver los errores cuando estamos desarrollando, pero queremos que sean invisibles al resto de usuarios, podemos generar una página de error personalizada que solo muestre los detalles a una determinada IP o si estas logado en un panel de control de la propia web, mientras que el resto de usuarios veran un bonito mensaje creado por ti sin detalles sobre el error.

2. Uso de procedimientos almacenados.

Una de nuestras experiencias contra ataques de inyeccion SQL fue en un cliente que ya tenia la aplicacion web funcionando y nos llamo para realizar un proyecto de SEO. La web tenia distintas funcionalidades, aunque basicamente era un buscador de textos cientificos. Nuestra sorpresa llego cuando al revisar el código en ASP muchas llamadas a la base de datos se realizaban de manera directa haciendo “select ” con parametros querystring (GET) en vez de usar procedimientos almacenados contra SQL Server.

¿Que implica ejecutar selects con parametros?

Los select con parametros son la puerta de entrada a los ataques SQL injection ya que salvo excepciones que ya veremos mas abajo, su uso deja abierta la puerta para que poniendo un simple punto y coma “;” todo lo que venga detras en el querystring sea ejecutado en la base de datos.

/pagina.asp?id=1;update users set name=’codigo javascript con enlace a un virus’

si en el script pagina.asp usamos una select abierta podemos hacer que la base de datos ejecute la sentencia detrás del ; en este caso cambiando el valor de un campo en toda la tabla de usuarios por un codigo javascript que nos lleve a una pagina con virus, que fue lo que ocurrió en este cliente. Todos los que trabajamos con bases de datos usamos nombres muy parecidos en muchas aplicaciones, por comodidad y sencillez de mantenimiento, con lo que determinadas tablas suelen tender a tener el mismo nombre en muchas webs haciendo mas fácil un ataque dirigido en este sentido.

¿Cual es la ventaja de los procedimientos almacenados?

En el caso de los procedimientos los parametros entran por separado y ademas “tipados”, esto significa que si el servidor espera un valor numerico (int) al recibir el “update …” fallará y no se ejecutará. Y en el caso de varchars podria incorporar el texto en un update, pero nunca se ejecutaría directamente minimizando el riesgo.

¿Tiene alguna debilidad un procedimiento almacenado?

Si, en general en el momento que un procedimiento almacenado se hace “dinámico”, es decir, que no ejecuta directamente siempre la misma operación, sino que recibe en un parámetro la sentencia sql y la ejecuta de manera interna. En este caso el problema es el mismo que en las selects abiertas.

Siempre hay que usar procedimientos parametrizados (ejemplo en ASP):

set cmd=Server.CreateObject(“ADODB.Command”)
Set Cmd.ActiveConnection = wConn
Cmd.CommandType = adCmdStoredProc
Set rs= Server.CreateObject(“ADODB.Recordset”)
Cmd.CommandText = “PROCEDIMIENTO_ALMACENADO”
Cmd.Parameters(“@ID”) = request.QueryString(“id”)
set RS=Cmd.Execute()

3. Filtros en la configuración de la web.

En el caso de IIS7 podemos generar un filtro bastante efectivo en toda la página web haciendo uso del archivo web.config, colocando unas cuantas lineas que protejan los parametros hacia ASP y ASP.NET.

Debajo de <system.webServer> colocaremos este código que dejamos, esto filtra en las URL todas las palabras clave listadas, que , salvo excepciones, son usadas solo en entornos de base de datos. Si el servidor IIS encuentra una coincidencia, muestra el error 404 de no encontrado cuando el atacante intente acceder a la página con esos parametros o URL.

<security>
<requestFiltering>
<filteringRules>
<filteringRule name=”SQLInjection2″ scanQueryString=”true”>
<appliesTo>
<add fileExtension=”.asp” />
<add fileExtension=”.aspx” />
</appliesTo>
<denyStrings>
<add string=”–” />
<add string=”/*” />
<add string=”alter” />
<add string=”begin” />
<add string=”create” />
<add string=”cursor” />
<add string=”delete” />
<add string=”drop” />
<add string=”fetch” />
<add string=”insert” />
<add string=”kill” />
<add string=”open” />
<add string=”select” />
<add string=”sys” />
<add string=”table” />
<add string=”union” />
<add string=”update” />
<add string=”top” />
<add string=”iif” />
<add string=”from” />
<add string=” or ” />
<add string=” in ” />
<add string=”chr” />
<add string=”asc(” />
<add string=”curdir” />
<add string=”len(” />
<add string=”ascii” />
<add string=”substring” />
<add string=”length” />
<add string=”@version” />
<add string=”exists” />
</denyStrings>
</filteringRule>
</filteringRules>
</requestFiltering>
</security>

el problema es que puede haber excepciones en las que haya palabras clave que podamos usar en alguna URL, lo que haria que tuviesemos que quitarlas de este filtro inicial.

4. Función de limpieza

Puede no ser técnicamente muy acertada, pero sin duda es muy efectiva, ya que nos permite dejar pasar en primera instancia determinadas palabras y luego filtrarlas en parametros según nuestra conveniencia, en ASP seria tal que así:
function clear_param(texto)

dim texto_final
texto_final=replace(texto, “SELECT”, “”)
texto_final=replace(texto_final, “‘”, “”)
texto_final=replace(texto_final, “UPDATE”, “”)
texto_final=replace(texto_final, “DELETE”, “”)
texto_final=replace(texto_final, “DROP”, “”)
texto_final=replace(texto_final, “UNION “, “”)
texto_final=replace(texto_final, “%”, “&#37;”)
texto_final=replace(texto_final, “%00”, “”)
texto_final=replace(texto_final, ” TOP “, “”)
texto_final=replace(texto_final, ” GROUP “, “”)
texto_final=replace(texto_final, “=”, “”)
‘texto_final=replace(texto_final, “>”, “&#62;”)
‘texto_final=replace(texto_final, “<“, “&#60;”)
texto_final=replace(texto_final, “IIF”, “”)
texto_final=replace(texto_final, “FROM”, “”)
texto_final=replace(texto_final, ” OR “, “”)
texto_final=replace(texto_final, ” AND “, “”)
texto_final=replace(texto_final, ” IN “, “”)
texto_final=replace(texto_final, ” CHR “, “”)
texto_final=replace(texto_final, ” ASC(“, “”)
texto_final=replace(texto_final, ” CurDir “, “”)
texto_final=replace(texto_final, “LEN(“, “”)
texto_final=replace(texto_final, “SHELL”, “”)
texto_final=replace(texto_final, “ASCII”, “”)
texto_final=replace(texto_final, “SUBSTRING”, “”)
texto_final=replace(texto_final, “LENGTH”, “”)
texto_final=replace(texto_final, “version”, “”)
texto_final=replace(texto_final, “exists”, “”)
clear_param=texto_final

End function

una función de este tipo servirá para limpiar un querystring en el caso de que por alguna razón debamos usarlo directamente sobre una select, para complementar el filtro en web.config:

clear_param(request.QueryString(“id”))

5. Bloqueo de IP´s

Como medio de disuasión es interesante si el atacante no es demasiado habil ya que burlar un bloque de Ip es relativamente sencillo con programas para navegación anónima, pero tambien sirve como bandera del ” te hemos visto y estamos preparados” lo que puede hacer que ese hacker se interese por otras webs más faciles que la nuestra. En la página de errores personalizados podemos tener una función que guarde un log con el error y la IP que lo ha producido, si además guardamos los parametros querystring que han producido el fallo podemos identificar los intentos de hacking a la web y la IP del atacante.

Todas estas técnicas de prevención de ataques SQL injection son aplicables en otros lenguajes, servidores web y bases de datos, usando en cada caso su propia sintaxis.

Si te ha servido este post o se nos olvida algo, por favor, deja un comentario y cuéntanos tu experiencia.