Foros del Web » Programando para Internet » ASP Clásico »

Microsoft OLE DB Provider for SQL Server (0x80040E14) Error de sintaxis o infracción

Estas en el tema de Microsoft OLE DB Provider for SQL Server (0x80040E14) Error de sintaxis o infracción en el foro de ASP Clásico en Foros del Web. El presente tema lo habia posteado en el foro de SQL pero me recomendaron que lo insertara en este Foro ya que aquí me podrian ...
  #1 (permalink)  
Antiguo 23/02/2006, 09:34
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
Sonrisa Microsoft OLE DB Provider for SQL Server (0x80040E14) Error de sintaxis o infracción

El presente tema lo habia posteado en el foro de SQL pero me recomendaron que lo insertara en este Foro ya que aquí me podrian ayudar mejor

Tengo un formulario el cual da acceso a un sistema (LOGIN) pero si meto caracteres extraños en el campo "NOMBRE DE USUARIO" O "CONTRASEÑA", me revienta el codigo.

No se si tenga que ver con el codigo o con la Tabla hecha en SQL SERVER.

Mas bien lo que quiero es que mi login y contraseña distingan entre mayusculas, minusculas con la opcion de poner simbolos permitidos como: #, $, %, &, _, etc etc

Gracias de antemano.
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #2 (permalink)  
Antiguo 23/02/2006, 10:05
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Seguramente ciertos caracteres echando a perder tu sentencia SQL, te sugiero que utilices consultas parametrizadas mediante el objeto command.

Código:
Dim qry
Dim ObjConn
Dim rs
Dim param
Dim cmd

Set ObjConn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")

'Siendo campo varchar de 300
caracteres = "--%'"
qry = "INSERT INTO tbl_algo(campo) VALUES(?); "

Set param = cmd.CreateParameter("nombre_parametro", adVarChar, adParamInput, 300, caracteres)
cmd.Parameters.Append(param)

ObjConn.Open strConnect
cmd.ActiveConnection = ObjConn
cmd.CommandType = adCmdText
cmd.CommandText = qry

cmd.Execute()

Set cmd = Nothing
Set param = Nothing
ObjConn.Close
Set ObjConn = Nothing
Saludos!
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 23/02/2006, 10:36
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
Caracteres????

Cita:
Iniciado por u_goldman
Seguramente ciertos caracteres echando a perder tu sentencia SQL, te sugiero que utilices consultas parametrizadas mediante el objeto command.

Código:
Dim qry
Dim ObjConn
Dim rs
Dim param
Dim cmd

Set ObjConn = Server.CreateObject("ADODB.Connection")
Set cmd = Server.CreateObject("ADODB.Command")

'Siendo campo varchar de 300
caracteres = "--%'"
qry = "INSERT INTO tbl_algo(campo) VALUES(?); "

Set param = cmd.CreateParameter("nombre_parametro", adVarChar, adParamInput, 300, caracteres)
cmd.Parameters.Append(param)

ObjConn.Open strConnect
cmd.ActiveConnection = ObjConn
cmd.CommandType = adCmdText
cmd.CommandText = qry

cmd.Execute()

Set cmd = Nothing
Set param = Nothing
ObjConn.Close
Set ObjConn = Nothing
Saludos!
Saludos:

No entiendo en esta parte: caracteres = "--%'"

Aqui tengo que meter todos los caracteres que quiero permitir en el campo login y password o los simbolos que NO quiero permitir?
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #4 (permalink)  
Antiguo 23/02/2006, 11:41
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
caracteres = Request.Form("campo")
campo puede traer caracteres que pueden ser usados como SQL injection "%--';"
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 23/02/2006, 12:43
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
No me queda, a lo mejor no me explique claro.

Tengo una pagina de autentificacion qu resibe las variables login y passwd, lo unico que quiero es que si en cualquiera de estas dos variables hay simbolos (!"#$%&/ etc etc) no truene el codigo, en muchas paginas lo he visto.

Pero esto que quiero hacer es ya con datos en una Tabla SQL, se que voy a tener que ver la forma de que al darse de alta el usuario no permita en login y contraseña la introduccion de simbolos como ", ',*,-, etc etc

Pero lo que quiero es que no identifique los simbolos como SQL Injection, hay alguna manera de hacer eso?
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #6 (permalink)  
Antiguo 23/02/2006, 13:33
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Cita:
Tengo una pagina de autentificacion qu resibe las variables login y passwd, lo unico que quiero es que si en cualquiera de estas dos variables hay simbolos (!"#$%&/ etc etc) no truene el codigo, en muchas paginas lo he visto.
Cita:
Seguramente ciertos caracteres echando a perder tu sentencia SQL, te sugiero que utilices consultas parametrizadas mediante el objeto command.
Lo que te estoy diciendo es que cambies la manera en la que insertas a la base de datos para que estos caracteres no te arruinen la sentencia SQL, esto se hace utilizando una consulta parametrizada, como el ejemplo que te puse, si no es eso, la verdad es que no te entiendo...

Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 23/02/2006, 13:55
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
Cita:
Iniciado por u_goldman
Lo que te estoy diciendo es que cambies la manera en la que insertas a la base de datos para que estos caracteres no te arruinen la sentencia SQL, esto se hace utilizando una consulta parametrizada, como el ejemplo que te puse, si no es eso, la verdad es que no te entiendo...

Saludos
Te explico, aunque yo haga la consulta parametrizada si el primer parametro contiene una cadena de este tipo por ponerte un ejemplo "$erik" ó "!erik", mi codigo revienta y manda un error. A eso es a lo que me refiero

Saludos
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #8 (permalink)  
Antiguo 23/02/2006, 14:13
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 4 meses
Puntos: 7
Te recomiendo que uses una funcion tipo replace, expresiones regulares y demas para evitar las inyecciones SQL (toy hasta las narices de tanto anglicismo) tal como se hace en PHP (stripslashes, get_magic_quotes_gpc, etc) que evitan los !"#$%&/ etc etc

El usuario podrá seguir usandolos, pero tu los conviertes a \! \" \' etc etc

He probado todos esos caracteres en uno de mis backend hechos con ASP y MySQL y ni un problema. Revisa la version de MS SQL que usas



Un saludo
  #9 (permalink)  
Antiguo 23/02/2006, 14:31
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Cita:
Iniciado por kire94
Te explico, aunque yo haga la consulta parametrizada si el primer parametro contiene una cadena de este tipo por ponerte un ejemplo "$erik" ó "!erik", mi codigo revienta y manda un error. A eso es a lo que me refiero

Saludos

No lo creo...mejor pon el código de tu consulta parametrizada...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #10 (permalink)  
Antiguo 23/02/2006, 16:49
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
Cita:
Iniciado por u_goldman
No lo creo...mejor pon el código de tu consulta parametrizada...
Formlogin = Request.Form("login")
Formpass = Request.Form("passwd")
'Execute stored procedure
Set comm = Server.CreateObject("ADODB.Command")
comm.ActiveConnection = Conn
comm.CommandType = 4

'Parameter for stored procedure
SET Param = comm.CreateParameter("Formlogin",200, 1, 50)
comm.Parameters.Append Param
comm.Parameters("Formlogin") = login

'Parameter for stored procedure
SET Param = comm.CreateParameter("Formpass",200, 1, 50)
comm.Parameters.Append Param
comm.Parameters("Formpass") = passwd

comm.CommandText = "spVerifPasswdE " & login

Set rs = Server.CreateObject("ADODB.Recordset")
Set rs = comm.Execute
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #11 (permalink)  
Antiguo 23/02/2006, 17:10
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
A reserva de ver el código del stored procedure y la descripción del error, lo que yo haría sería probar en código duro el procedimiento, esto es algo que yo hago rutinariamente y no tiene ningún problema, para mi el problema está en el código que estás usando, o en el stored procedure mismo...
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #12 (permalink)  
Antiguo 23/02/2006, 17:40
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
Solo una pregunta para que me quede solucionado, como le hago para pasar una variable creada con CreateParameters a un Stored Procedure por que tengo este codigo esta bien sencillo y me manda error de "Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros", este es el codigo.


<%@ LANGUAGE="VBSCRIPT" %>

<!---#include file = "conecta.asp"--->

<%
Dim ObjConn
Dim rs
Dim param
Dim cmd

Set cmd = Server.CreateObject("ADODB.Command")

'Siendo campo varchar de 300
Formlogin = request.Form("login")
Response.Write(Formlogin)
'qry = "spVerifPasswdE "

Set param = cmd.CreateParameter("@login", adVarChar, adParamInput, 50, Formlogin)
cmd.Parameters.Append(param)

Response.Write(login)

cmd.ActiveConnection = Conn
cmd.CommandType = adCmdText
' cmd.CommandText = qry
'
' cmd.Execute()


%>
__________________
"La adulación es una moneda que empobrece al que la recibe"
  #13 (permalink)  
Antiguo 23/02/2006, 18:01
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Set param = cmd.CreateParameter("@login", adVarChar, adParamInput, 50, Formlogin)

Ese es el parámetro de entrada que recibe tu stored procedure, el valor es el último argumento que se llama Formlogin es tu caso, pero tienes varia confusiones a la hora de llamar a tu stored procedure, por eso te decía que lo hicieras primero desde el código, y ya después ves como llamar a un stored procedure...

Necesitarías ver el commandtext y type adecuado para llamar a tu stored procedure.

cmd.CommandText = "tu_storedprocedure"
cmd.CommandType = adCmdStoredProc

Además de checar que la conexión que uses realmente se esté conectando...

Por el tipo de duda que tienes, insisto, no es necesario un stored procedure, haz la sentencia SQL en tu código duro, no deberías tener ningún problema.

Saludos.
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #14 (permalink)  
Antiguo 23/02/2006, 18:20
 
Fecha de Ingreso: enero-2006
Mensajes: 169
Antigüedad: 19 años, 3 meses
Puntos: 0
De acuerdo

Ya quedo, ahora solo hay un probblema el login no distingue entre mayusculas y minusculas como hago para que distinga, la contraseña si distigue pero esta no se la paso como parametro, lo que hago es que una ves que encuentra al usuario el SP hace esto mi codigo:

If (rs("pas")<>request("pas") then
respose.write "contraseña incorrecta"
end if

Por cierto abajo pongo el codigo correcto para que entiendas mejor, me refiero al codigo que hace la consulta parametrizada sobre la variable "login"


set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = Conn
cmd.CommandText = "spVerifPasswdE"
cmd.CommandType = 4
cmd.CommandTimeout = 0
cmd.Prepared = true
cmd.Parameters.Append cmd.CreateParameter("@login", 200, 1,10,request.form("login"))
set rs = cmd.Execute()

Saludos
__________________
"La adulación es una moneda que empobrece al que la recibe"
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




La zona horaria es GMT -6. Ahora son las 09:35.