Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: NetStorm en 31 Julio 2011, 01:06 am



Título: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 31 Julio 2011, 01:06 am
Hola, estoy montando un software de facturación comercial, entonces trato de darle la mayor flexibilidad, algunos de mis clientes tienen páginas web, y bueno su hosting incluye BD en MySQL, el problema es que la BD es local, es decir desde PHP se trabajaría como "localhost", siendo así, ¿como podría acceder desde C# para realizar consultas?, alguno de Uds ya ha trabajado con algo parecido, necesito vuestra orientación.

Lo que trato de hacer es trabajar un sistema comercial que pueda ejecutarse desde una App de escritorio y desde el servidor web.

Saludos ;)


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: neoncyber en 31 Julio 2011, 05:04 am
Hola, hace tiempo puse una entrada en mi blog que especifica la conexion a base de datos desde c# con mysql
http://donkeysharp.blogspot.com/2010/09/conectarse-mysql-desde-net.html

Saludos


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 31 Julio 2011, 06:28 am
Hola pues para ese entorno de trabajo  tienes 2 opciones :
1° la primera y más fácil es que desde el panel administrativo permitas acceso a la base de datos!! Y no todos los hosting lo permiten, consulta al proveedor del host .

2° la segunda opción pues es algo más trabajosa pero no tan complicada y es montar web services con php que luego consumirás desde tu aplicación web-escritorio.

Y bueno la otra opción es obvia cambiar de provedor de hosting , si lo que buscas es soporte para asp .net pero también base de datos libres como mysql –postgresql pues recomendaría
http://www.ubiquityhosting.com
Usan servidores Linux y emulan asp .net con Mono. Es 100% compatible con los web Services, con Asp .net tienes que cambiar algunas cosas.

Como pregunta personal,  ya tienes echa tu aplicación? Porque quieres usar Mysql? Te lo pregunto porque yo tengo avanzado mantenimiento de artículos(por familia-sub familias),clientes,proveedores y compras en c# y postgresql, uso web services para conexión de base de datos, si gustas pues  podemos compartir ya que todo eso lo tengo abandonado y quisiera terminarlo.


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 1 Agosto 2011, 18:17 pm
NeonCyber gracias por la referencia, eso es bastante conocido con MySQL Conector, eso lo uso cuando trabajo en entornos de redes LAN o localmente, allí sirve, pero para un hosting... NO, bueno no es que no sirva, sino que tu ejemplo se basa en entornos locales...

Bueno en realidad si tengo de como hacer esto con servidores de hosting que tienen la BD en un servidor aparte al del Host como GoDaddy, y desde el Cpanel configuras conexiones remotas de MySQL, eso porque te dan un servidor de MySQL al estilo: mySQL.hosting.com

pero... ¿Alguien tiene idea cómo hacerlo con servidores que albergan la BD y MySQL en el mismo servidor?, es decir allí tu servidor de MySQL no es "mySQL.hosting.com" sino "localhost" y ademas quiero conectarme desde una red normal de Pc's no desde otro dominio que creo sería más fácil.


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 1 Agosto 2011, 18:45 pm
Pues si tu host  lo permite y tiene cpanel en la opción de “base de datos” –“mysql remota” agregas las Ips que quieres que tenga acceso a la base de datos.

(http://www.imagengratis.org/images/cpanel.jpg)
(http://www.imagengratis.org/images/cpanel2yx8uy.png)

Y en tu programa cambias la cadena de conexion para que apunte a tu host eso es todo 100% probado.(en un host que administro)

Nota: si tus clientes tienen ip dinamico entonces coloca % para que permita acceso a todos los host.


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 1 Agosto 2011, 22:27 pm
Por ejemplo si mi host es www.paquito.com ¿como sería mi namehost para MySQL?, me echas una mano con eso último por favor...

Y se me ocurre que en lugar de Ip's dinámicas podría enmascararlo con un subdominio de DynDns por ejemplo ¿funcionaría?  ;-)

Gracias por tu tiempo y atención ;)

Una curiosa duda ¿porqué tienes un payaso en tu avatar?


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 1 Agosto 2011, 22:45 pm
Pues don Dyndns lo probe y no funciono :( ahora si tu host es www.paquito.com pues tu namehost tambien seria igual(sin el www al comienso). si no te funciona prueba a poner tu ip en la lista de permitidos talves ese es el problema. tambien puedes probar a conectarte pero desde el administrador de consola del mismo mysql.

abre un terminal y escribe

mysql -u user -h paquito.com -p

donde "user" es el nombre de usuario mysql y "paquito.com" es el dominio sin www al comienso, y fijate que error te bota.



Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 1 Agosto 2011, 23:45 pm
Uyuy!, ni modo tendré que usar eso del comodín "%", sabes la verdad no soy muy experto en MySQL, pero si permito todas las conexiones remotas, ¿Crees que se abren brechas de seguridad?, es cierto, el atacante quizás no conozca la estructura de mi BD, pero debe bastar conectarse, ejecutar comandillos y sacar datos o hacer maldades, ¿existe este riesgo?.

Tampoco me gustaría que me llamen "Mediocre programador" jajaja  ::)


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 2 Agosto 2011, 00:21 am
Pues Existe un problema se seguridad muy grande y es que la contraseña de la BD esta en el cliente (tu aplicación la contiene en su codigo fuente) por eso te recomendé Web Services que si es cierto es más trabajo te da mayor seguridad ya que puedes validar usuarios del lado del servidor usando las los SoapHeader!!


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: 43H4FH44H45H4CH49H56H45H en 2 Agosto 2011, 07:57 am
el atacante quizás no conozca la estructura de mi BD, pero debe bastar conectarse, ejecutar comandillos y sacar datos o hacer maldades, ¿existe este riesgo?.

Ni siquiera se necesitaria eso, hace unos meses le hice ingenieria inversa a una aplicacion de escritorio de una empresa dedicada a la Ingenieria de Software, la cual fue programada en vb 6 y trabajaba con mysql en un hosting  de pago (te mostraria el enlace al tema, pero los autores del software pidieron al moderador de la sección borrar dicho tema hasta mejorar su seguridad), luego de unos minutos pude obtener acceso al hosting con todos los permisos, accedi a todos los datos incluyendo las contraseñas de los usuarios root en mysql.
De ahi para automatizar la exploración hice un pequeño software en C++ con QT:

(http://img16.imageshack.us/img16/5364/40202508.jpg) (http://imageshack.us/photo/my-images/16/40202508.jpg/)

http://foro.elhacker.net/programacion_cc/mysql_browser_c_y_qt-t321390.0.html

Las imágenes no estan disponibles, culpa del sitio donde las subi. Si no sabes compilarlo, deje una descarga a un ejecutable para windows y otra con el proyecto + ejecutable para linux, puedes probarlo en un hosting gratuito solo para ver que sencillo que es navegar por las bases de datos.

Ahora lo uso con frecuencia en slackware para explorar BD's y con las mejoras que le hice este tiempo puedo testear inyecciones sql automaticamente.

De todo eso lo que podria recomendar a grandes rasgos es que si utilizas en una BD local lo hagas con una aplicación de escritorio, si lo haces via web y quieres utilizar una aplicación de escritorio las contraseñas deberan estar en la BD remota y el usuario debe escribirlas cada vez que ingresa a la aplicación, debes tener un buen manejo de los permisos de usuario, procedimientos almacenados y algunas tablas de apoyo, ademas puedes combinar la aplicación con funciones en php para hacerlo similar a los web services de manera sencilla.
Otra forma seria hacerlo directamente en php o en asp.net, tener la aplicación en tu hosting (eso para no dar el codigo fuente a tus clientes) y segun el usuario conectado direccionar a la BD del hosting de cada cliente, algo como rentarles tu aplicación y que sus datos vayan guardandose en la BD del hosting de cada cliente (ahi seria bueno un cifrado para que solo tu aplicación pueda leer dichos datos).

Bueno ya no me extiendo más.
Saluos.


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 2 Agosto 2011, 18:36 pm
Ok, ya veo

Lo estoy programando en .NET(C#) por allí me dijeron que use una aplicación para proteger el código y he pensado en ChilkatOfuscator, ahora me esta dando miedo eso de las conexiones, no me gusta, no lo sé, se ve poco profesional y puede traerme problemas con clientes.

Necesito que por favor si me pudierais explicar un poco más de Web Services en PHP es decir ¿cual es el procedimiento...?, no quiero código sino algo asi como un esquema a grandes rasgos, es decir:

Ingresar usuarios por SoapHeader,
Verificar
Recibir consulta por metodo x
devolver XML

Eso es lo que mas o menos yo supongo no, que si hago un Web Service en PHP debería devolver datos en XML, ya que C# se entiende bien con este tipo de formato, no lo tengo muy claro, pero como is pido por favor, sería de mucho agradecer toda la orientación que puedan darme.


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 3 Agosto 2011, 15:37 pm
Bueno pues primero Debes aprender ah usar los web services en Php para eso pues yo aprendi con

http://www.orlandobrea.com.ar/2009/09/webservices-con-nusoap-en-php-ejemplo-1.html

Una vez montado el ejemplo que está ahí puedes necesitas generar código para .net con la herramienta wsdl que tiene el visual studio, abre la consola de visual studio y ejecutas

Código:
wsdl http://localhost/IT/nusoap-test/nusoap_server_ej1.php?wsdl

donde odviamente “http://localhost/IT/nusoap-test/nusoap_server_ej1.php?wsdl “ es la ruta del webservices eso genera un archivo “ws_orlando.cs”  que es el nombre que tiene el web service en el php

Código:
$server->configureWSDL('ws_orlando', $miURL);

Bueno ahora solo te queda invocar a tu clase desde c#

Código:
ws_orlando _ws_orlando = new ws_orlando();
            
//Descomentar la siguiente linea y colocar la ruta del web service
//_ws_orlando.Url = "http://localhost/IT/nusoap-test/nusoap_server_ej1.php";

this.lblResul.Text = _ws_orlando.getRespuesta(this.txtParametro.Text);

(http://img818.imageshack.us/img818/2998/webservicephp.jpg)

Puedes descargar el ejemplo que hice desde aquí(incluye el web service en php):
http://www.megaupload.com/?d=8GS03X85

Bueno eso sería un ejemplo sencillo pero practico ya que podrías generar webservices para insertar datos y consultas (usando socialización serialización)

Nota: Cuando trabajas con WebServices o conectas a servidores de datos en remoto las consultas pueden tomar cierto tiempo dependiendo de la velocidad de internet por ello es muy recomendable que trabajes usando procesos en paralelo con la clase Thread que incorpora .net, yo prefiero usar el componente “BackgroundWorker” que hace lo mismo (eso pienso), una ves que te acostumbras no dejas de usarlo en especial porque evita que tu aplicación parezca que se cuelga en conexiones lentas u operación costosas con bucles



Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: NetStorm en 4 Agosto 2011, 02:11 am
Waooo tío tendría que pagarte por tu ayuda, eres tan desinteresado, hay cosas de las que me has hablado como los Threads que no las he tocado en C# pero si sé que son y más  menos para que sirven, lo que me gustaría saber es a que te refieres con eso de (usando socialización)..

Gracias por tu ayuda eso era lo que necesitaba una guía rápida a vista de pájaro como mas o menos es toda la transacción. Miles más gracias por el archivo en Megaupload, yo ya no trabajaba mucho con C# porque me pedían mas aplicaciones en WEB y ando metido con el AJAX, Jquery, el PHP, y bueno a veces siento que no debo despegarme del .NET porque estoy olvidando cosas.

Saludos cordiales,  ::)


Título: Re: Consultar MySQL en servidor WEB desde C# ...
Publicado por: .::IT::. en 4 Agosto 2011, 03:50 am
jejeje quise decir serialización(eso pasa por corregir con word!!!), como por ejemplo xml para cuando quieras devolver consultas “select” ya en el lado del cliente deberás generar una clase que convierta xml a datatable o manejar directamente el xml como Datasource.
Aquí un link
http://www.orlandobrea.com.ar/2010/05/servicios-web-retornar-un-xml-con.html