Foros del Web » Programación para mayores de 30 ;) » .NET »

inserir texto con comillas

Estas en el tema de inserir texto con comillas en el foro de .NET en Foros del Web. Hola! Sé que es una pregunta muy básica e igual alguno me manda a pastar y me dice que soy un aprovechado y lector de ...
  #1 (permalink)  
Antiguo 31/03/2004, 14:37
 
Fecha de Ingreso: febrero-2004
Mensajes: 67
Antigüedad: 20 años, 2 meses
Puntos: 0
inserir texto con comillas

Hola!

Sé que es una pregunta muy básica e igual alguno me manda a pastar y me dice que soy un aprovechado y lector de foros en vez de programador pero es que ya he probado varias cosas y sigo teniendo el mismo problema. Es cuando desde un campo input type text envio una cadena que contiene comillas y apóstrofes y es procesado por el formulario para inserirlo a la base de datos.

Lo primero que pensé es que existiria alguna función para codificar cadenas con formatos compatibles tipo urlencode. También que existiera alguna funcion similar al addslashes de php. Pero he acabado hacinedo uso de replace. En mi caso el código es c# y tengo lo siguiente:

sqlalta.Parameters.Add("@OBJECTE",SqlDbType.Text);
string obj=TBObjecte.Text.Replace(" ' "," ' ' ");
/*he puesto espacios para que se vea mejor que sustituyo una comilla por dos */
sqlalta.Parameters["@OBJECTE"].Value=obj;

Pues bien, este código al hacer insert en la base de datos (MS SQL Server)me da error cercano a ....
He probado poniendo un .ToString() a continuación del Replace(...)
También he probado sin el replace de escribir en el campo del formulario dos comillas en vez de una y entonces si que me hace el insert. También he leído por aqui que pueden crearse agujeros de seguridad si no se controlan la introducción de comillas por parte del usuario.

En fin, espero alguna orientación al respecto.
Gracias.

Última edición por keither; 31/03/2004 a las 14:39
  #2 (permalink)  
Antiguo 31/03/2004, 15:49
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
MM.. por lo regular en vez de reemplazar el texto de comilla simple por doble comilla mas bien se reemplaza por un espacio en blanco...

string obj=TBObjecte.Text.Replace(" ' ","");

Que tan necesario es que pongas las doble comillas..??

Saludos
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 31/03/2004, 16:33
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Creo recordar(corriganme si me equivoco) que el hecho de que las comillas simples hicieran como de "fin" y a continuacion se procesara en la BD los comandos seguidos era el temidamente conocido como SQL INJECTION. y tambien creo recordar(por la conferencia a la que asisti hace poco de Microsoft) que poniendo en la parte superior de la página(suponiendo que es ASP.NET) lo de AutoEventWireup="true" se solucionaba este problema,aunque no estoy del todo seguro,si alguien tiene mas info del tema sera bien recibida ^_^
  #4 (permalink)  
Antiguo 31/03/2004, 16:49
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
lo de AutoEventWireup="true" se solucionaba este problema
Bueno.. por lo que yo tengo entendido el AutoeventWireup es para ya no utilizar delegados y asociarlos al evento ya sea de la página... de algun boton... etc...

Por ejemplo... si tengo al AutoEventWireup en false haría esto:

private void Page_Load(object sender, System.EventArgs e)
{
message="blabla";
}
// Agrego un deletegado para el evento Page_Load

override protected void OnInit(EventArgs e)
{
this.Load += new System.EventHandler (this.Page_Load);
}
}

en cambio si lo tengo en true solo basta con hacer ésto:

private void Page_Load(object sender, System.EventArgs e)
{
message="blabla";
}
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #5 (permalink)  
Antiguo 31/03/2004, 16:53
Avatar de SunDarK  
Fecha de Ingreso: diciembre-2003
Ubicación: Jerez de la Frontera
Mensajes: 1.193
Antigüedad: 20 años, 5 meses
Puntos: 8
Ajannnnnn ese RootK siempre al pie del cañon ;D.
Pues juraria que el chico que dio la conferencia dijo que lo de la ' se solucionaba con lo que yo he dicho,es cuestion de probarlo y ver que tal,saludosss y cuidate!
  #6 (permalink)  
Antiguo 31/03/2004, 17:58
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
Pues juraria que el chico que dio la conferencia dijo que lo de la ' se solucionaba con lo que yo he dicho,
Bueno... personalmente tal vez no descarte esa posibilidad SunDarK aunque tengo mis dudas... por si a alguien mas le interesa les puedo pasar el link donde lo explican un poco mas.


http://www.dotnet247.com/247referenc...m/?kbid=324151

Pero seguiremos investigando. . .
  #7 (permalink)  
Antiguo 31/03/2004, 19:22
Avatar de sindestino  
Fecha de Ingreso: noviembre-2003
Ubicación: xxxx xxxx
Mensajes: 270
Antigüedad: 20 años, 6 meses
Puntos: 0
personalmente lo que hago para evitar SQL injection en mis web es reemplazar la comilla simple (') por éste caracter (`) que es muy parecido pero no interfiere en mis consultas.
  #8 (permalink)  
Antiguo 01/04/2004, 00:23
 
Fecha de Ingreso: febrero-2004
Mensajes: 67
Antigüedad: 20 años, 2 meses
Puntos: 0
El hecho de utilizar esa comilla es por los apóstrofes en catalán. Por ejemplo en catalan para decir:

El hombre

Decimos

L'home

Y ahí está el tema. Lo que pasa es que en otro formulario tengo el mismo caso y me funciona! Voy a ver si tengo la variable esta del wireup.

Saludos y gracias por vuestras intervenciones.
  #9 (permalink)  
Antiguo 01/04/2004, 07:52
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Hola
yo particularmente lo que hago es tener una funcion compilada en una dll que almacena funciones "utiles" tal que así:


Public Function sinCom(cadena as String) as String

cadena = replace(cadena,"'","´")
return cadena

end function


Esto reemplaza la comilla simple ' por el caracter ´(el acento)

Para utilizar la funcion, pues nada:

string obj= sinCom(TBObjecte.Text);


Salu2
  #10 (permalink)  
Antiguo 01/04/2004, 15:53
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 20 años, 11 meses
Puntos: 7
Pues yo opingo que debe haber algo mucho más sencillo, tanto ASP .NET y no soluciona ese problema ocmo lo hace PHP que es simplemente poniendo un slash delante?

Tiene que haber algo, no es posible que Microsoft haya desarrollado un nuevo ASP y ese problema tenga que solucionarse con e el rústico replace.
__________________
Charlie.
  #11 (permalink)  
Antiguo 01/04/2004, 16:01
 
Fecha de Ingreso: febrero-2004
Mensajes: 67
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola a todos. Revisando el código de la página que me funcionaba he retocado y ahora me funciona correctamente sin la necesidad de ningun replace.

De todas maneras y sin intención de abrir ningun debate aqui sobre el tema no me acabo de adaptar a esta tecnologia. Continuo prefiriendo php para resolver aplicaciones web, sobretodo con la inminente aparicion de php 5

Saludos
  #12 (permalink)  
Antiguo 02/04/2004, 09:15
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
De todas maneras y sin intención de abrir ningun debate aqui

Cita:
Continuo prefiriendo php para resolver aplicaciones web
MM.. bueno.. es cuestion de gustos . . .,
  #13 (permalink)  
Antiguo 02/04/2004, 10:57
Avatar de lucxx  
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 321
Antigüedad: 20 años, 5 meses
Puntos: 0
Si, bueno, el que sabe, sabe, y el que no, PHPNuke
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 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:40.