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

cambios en la URL por el usuario, peta la bbdd

Estas en el tema de cambios en la URL por el usuario, peta la bbdd en el foro de ASP Clásico en Foros del Web. hola, estoy haciendo una web en asp, y tengo una bbdd que tiene un par de tablas, el problema es que los identificadores, las claves ...
  #1 (permalink)  
Antiguo 19/07/2005, 08:03
 
Fecha de Ingreso: marzo-2002
Mensajes: 132
Antigüedad: 23 años, 1 mes
Puntos: 0
cambios en la URL por el usuario, peta la bbdd

hola,

estoy haciendo una web en asp, y tengo una bbdd que tiene un par de tablas, el problema es que los identificadores, las claves de la tabla son integers, i cuando un usuario me pone en la barra de navegacion una letra pues peta todo.
es decir por ejemplo, lo correcto es

www.miweb.com/consulta.asp?id=9
i en esta pagina muestro los resultados,

pero si el usuario cambia este 9 por AAA
es decir
www.miweb.com/consulta.asp?id=AAA
peta

como puedo solucionarlo???

graciaaas
__________________
Xisclet
  #2 (permalink)  
Antiguo 19/07/2005, 08:09
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Primero: El usuario no debería saber que le estas enviando parámetros a la página (usa POST en vez de GET)

Segundo: Deberias hacer una validación antes de realizar la consulta para evitar este tipo de errores

Tercero: Deberias hacer otra validación para asegurarte que el usuario no ingrese los parámetros por URL, es decir, debes asegurarte que sea un usuario valido y que venga de una página válida

Cuarto: Saludos
  #3 (permalink)  
Antiguo 19/07/2005, 08:15
 
Fecha de Ingreso: marzo-2002
Mensajes: 132
Antigüedad: 23 años, 1 mes
Puntos: 0
como???

si lo hace el por la url, como lo controlo???
__________________
Xisclet
  #4 (permalink)  
Antiguo 19/07/2005, 08:15
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años
Puntos: 9
Con una sentencia condicional puede ser:

Código:
 
if Typename(Request.QueryString("id")) = "Integer" then
'haces lo que sea con la variable 
else
'haces lo que sea cuando la variable no sea de tipo integer
end if
También hay funciones mucho más complejas, porque no solo es cuando te ingresan un tipo de valor qeu no corresponde con el que tenés en la base de datos, sino que también tenés que evitar el SQL Injection. Esa sentencia condicional sería solamente una mínima parte de una función de validación más grande y compleja.
Espero que te haya servido de algo.
Saludos!.
__________________
Add, never Remove
  #5 (permalink)  
Antiguo 19/07/2005, 08:29
 
Fecha de Ingreso: marzo-2002
Mensajes: 132
Antigüedad: 23 años, 1 mes
Puntos: 0
ponga letra o ponga numero siempre me entra en el else

porque???
__________________
Xisclet
  #6 (permalink)  
Antiguo 19/07/2005, 08:37
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Alternativas:

1)
parametro = Request.Form("Id")
Solo toma un valor si ID viene de un formulario POST y no URL o por GET

2)
parametro = Request("Id")
if IsNumeric(parametro) Then
Response.Write "Valor Numerico"
End If
Solo imprime el texto si el valor (que puede ser POST o GET) es numérico

3) Preguntar con alguna variable se servidor si viene el usuario de la página X

4) Preguntar por alguna variable de session que se creó en la página previa

etc

Saludos
  #7 (permalink)  
Antiguo 19/07/2005, 08:48
 
Fecha de Ingreso: marzo-2002
Mensajes: 132
Antigüedad: 23 años, 1 mes
Puntos: 0
yujuuu

esto parece que funciona
luego te digo algo

GRaciAAAS
__________________
Xisclet
  #8 (permalink)  
Antiguo 19/07/2005, 09:09
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años
Puntos: 9
La verdad que no se, yo lo probé con este ejemplo y a mi me funciona:

valor = 23892

if TypeName(valor) = "Integer" then
Response.Write("La variable valor es Integer")
else
Response.Write("Como se que es integer, entonces no pongo nada interesante acá)
end if

Con eso me funciona bien a mi, de todas formas, me parece que las alternativas que te dio Myakire son mucho mejor.
Saludos!.
__________________
Add, never Remove
  #9 (permalink)  
Antiguo 19/07/2005, 10:32
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 5 meses
Puntos: 16
si mal no recuerdo en la biblioteca de funcionoes hay una funcion para impedir que el usuario manipule la direccion, es decir que si el parametro que se pasa por URL no fue generado por una determinada pagina no vale..... de todas maneras date una vuelta por la biblioteca.... hay muchas funciones muy utiles.... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #10 (permalink)  
Antiguo 19/07/2005, 10:36
 
Fecha de Ingreso: abril-2004
Ubicación: México D.F.
Mensajes: 1.724
Antigüedad: 21 años
Puntos: 4
Hay varias alternativas que se te han mencionado, adecualas segun tus necesidades, por ejemplo yo en mi sistema al generarse una pasrtida en las facturas o remisiones envio x url ciertos valores, pero los hago a trevés de una ventana oculta, sin que el cliente se de cuenta.


Es cosa de ingenio .
  #11 (permalink)  
Antiguo 19/07/2005, 11:04
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años
Puntos: 9
Otra cosa que se me ocurre ahora que se podría hacer (nunca lo he intentado, tampoco se si podrá funcionar), es tener un form con varios campos hidden (según sea necesario). Por ejemplo, si necesitas pasar un solo valor por la URL, digamos un Id, entonces ese formulario tendrá un solo campo hidden. Al hacer click en el link, se llamaría a una función javascript que establezca el valor de ese campo hidden según el Id del campo que fue clickeado. El action del form sería la página que pondrías comunmente en el link, y así se enviaría los datos por POST. Y haciendo Request.Form("id"), te aseguras que la variable sea POST y no GET.
Lo que digo es algo así:

Código:
 
<script> 
function SetVar(param_Value){
   document.MyForm.hid_Id.value = param_Value
   document.MyForm.submit()
}
</script>
<html>
<body>
	<form method="post" action="una_pagina.asp" name="MyForm">
		<input type="hidden" name="hid_Id">
	</form>
 
	//los Links
 
	<a href="#" OnClick="SetVar(3289)">
	<a href="#" OnClick="SetVar(2091)">
	<a href="#" OnClick="SetVar(2390)">
	...
Luego lo pruebo y comento si funciona o no.
Saludos!.
__________________
Add, never Remove
  #12 (permalink)  
Antiguo 19/07/2005, 11:28
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 20 años
Puntos: 2
Hola!

Tanto post como get son igual de peligrosos cuando alguien quiere hacer daño, hagas lo que hagas, sea post o get, eso es un peligro constante, y de cualquier forma en que lo hagas es peligroso y te puede traer errores.

Lo que mencionas xisclet, es un error claro de validación, ahí esta la clave, como asegurarnos de que estamos recibiendo algo valido, ahi es donde tienes que trabajar mas fuerte.

Y bien, lo que mencionas y en tu caso específico, simplemente validar que recibiste un numero seria mas que suficiente, y la mejor forma es como Myakire apuntaba.

Por otra parte para pasar los valores, seria en este orden lo recomendable:

1. session --> Cuando estas en area de miembros
2. post
3. get

Pero cada uno tiene sus usos o sus casos donde esta bien aplicarlo, en este caso de la consulta creo que puedes aplicar post sin problemas.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #13 (permalink)  
Antiguo 19/07/2005, 12:01
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Para mi lo más efectivo es usar request.servervariables("http_referer")

si viene nula, es muy probable que el usuario haya manipulado la url.
si no viene nula, puede haber hecho una copia local de la página y, aunque los valores vengan por post, joderte la aplicación.

Entonces verificás que request.servervariables("http_referer") sea igual (con dominio y todo) a la página de la que estás esperando los valores.
__________________
...___...
  #14 (permalink)  
Antiguo 19/07/2005, 12:36
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 5 meses
Puntos: 16
sigo inisitiendo que en la biblioteca hay una funcion para eso:
Cita:
Iniciado por Muzztein
Siguiendo con las funciones de seguridad.

Esta funcion compara la procedencia del usuario contra la procedencia que el programador especificó para que determinado script se pudiera ejecutar de manera segura.

Util para asegurarse, por ejemplo ,que una pagina del tipo eliminar.asp?id=12 sea accionada de su correcto formulario y no de manera directa, impidiendo así a un usuario mal intensionado hacer acciones que no esta autorizado a hacer.
Código:
function checa_procedencia(procedencia_autorizada,dominio_autorizado)

    aux = Request.ServerVariables("HTTP_REFERER")

    if len(aux) = 0 or aux = "" then 
        checa_procedencia = false
        exit function
    end if

    arreglo             = split(aux,"/")
    dominio_real     = arreglo(2)
    procedencia_real = arreglo(ubound(arreglo))

    if lcase(procedencia_real) = lcase(procedencia_autorizada) and lcase(dominio_real) = lcase(dominio_autorizado) then
        checa_procedencia = true
    else
        checa_procedencia = false
    end if
end function
Donde procedencia_autorizada es el nombre del archivo ASP que DEBE invocar a nuestro script a ejecutar, y donde dominio_autorizado es el dominio o nombre de la web de donde el script se esta ejecutando. ej : "www.misitio.com"

Modo de uso
Código:
if checa_procedencia("1.asp","localhost") = true then 
    escribe "eres bienvenido" 
else
    escribe "no eres binevenido"
end if
Consumala a discrecion
Saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #15 (permalink)  
Antiguo 19/07/2005, 12:49
Avatar de dobled  
Fecha de Ingreso: enero-2002
Ubicación: Rancagua - Chile
Mensajes: 1.328
Antigüedad: 23 años, 2 meses
Puntos: 2
nada que ver con el tema pero que es "peta"?
__________________
Usa títulos específicos y con sentido
En las listas de correo o en los grupos de noticias, la cabecera del mensaje es tu oportunidad de oro para atraer la atención de expertos cualificados en aproximadamente 50 caracteres o menos. No los desperdicies en balbuceos como "Por favor ayúdame" (de "POR FAVOR AYÚDAME!!!" ya ni hablamos). No intentes impresionarnos con lo profundo de tu angustia; mejor usa ese preciado espacio para una descripción lo más concisa posible del problema.
  #16 (permalink)  
Antiguo 19/07/2005, 14:19
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Como que "se jode" o en éste caso "da errores".
Creo que es eso, igual lo debería confirmar un español ;)
__________________
...___...
  #17 (permalink)  
Antiguo 20/07/2005, 01:31
 
Fecha de Ingreso: septiembre-2004
Mensajes: 179
Antigüedad: 20 años, 7 meses
Puntos: 0
Buenas,

pues si, "petar" es dar errores, fallar. Tiene otros usos y significados, algunos de los cuales no podría repetirlos aquí por si hubiera alguna señorita presente :)

En cuanto a la conveniencia de usar post o get, no siempre es mejor el método post. Por ejemplo, cuando queremos dar al usuario la posibilidad de que guarde páginas en favoritos. Lo mejor es hacer una buena validación antes y después de enviar el formulario. Alguna de ellas del lado del servidor (la segunda, más bien)

Por cierto, El_Metallik, sabes cual es esa función? A mi no me suena ninguna en ASP. Vale, encontrado aquí. Básicamente comprueba que lo que viene por el querystring coincide con lo que viene por el referrer.
__________________
Estoy en www.aibarra.net

Camino para preguntar: manual -> Google -> FAQs y buscador del foro -> Nuevo Tema.
Tan difícil es escribir correctamente? Es más fácil leerlo. Pónselo fácil al que quiera ayudarte.

Última edición por Aibarra.net; 20/07/2005 a las 01:48
  #18 (permalink)  
Antiguo 20/07/2005, 05:22
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 20 años
Puntos: 9
El código que puse arriba funciona. Creen que puede ser una alternativa valida hacer eso para que el usuario no pueda manipular los valores de las variables? que desventajas tiene siempre usar post?.
Saludos!.
__________________
Add, never Remove
  #19 (permalink)  
Antiguo 20/07/2005, 09:30
 
Fecha de Ingreso: septiembre-2004
Mensajes: 179
Antigüedad: 20 años, 7 meses
Puntos: 0
Buenas,

no hay mucha diferencia entre usar GET y POST. GET se usa generalmente para obtener algo del servidor (búsquedas, por ejemplo) y POST para enviarlo (datos de formulario, subida de ficheros, etc) El método POST permite mover más cantidad de datos, pero GET también suele ser suficiente para los usos normales (salvo la subida de ficheros) Y como comenté más arriba, si queremos que el usuario pueda guardar la página en favoritos, con la información que metió en el formulario, siempre se debe usar GET.
__________________
Estoy en www.aibarra.net

Camino para preguntar: manual -> Google -> FAQs y buscador del foro -> Nuevo Tema.
Tan difícil es escribir correctamente? Es más fácil leerlo. Pónselo fácil al que quiera ayudarte.
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 16:32.