PDA

Ver la Versión Completa : Como evitar dejar rastros al navegar.


selman
28-08-2006, 18:52:57
Hola, desarrollé una aplicación ASPX.NET en Delphi 2005, al navegar entre páginas de la aplicación se van quedando rastros de las páginas y valores de los parámetros que paso entre páginas en el Explorador, esto va en contra de la seguridad del portal, ¿Cómo puedo evitar esto?

Gracias, Selman.

dec
01-09-2006, 18:46:50
Hola,

Yo, la verdad, es que no entiendo muy bien qué quieres decir conque se van quedando rastros... ¿No podrías escribir por aquí un poco de código para dejar claro el "conceto"? O tal vez es que uno no es capaz de ver por dónde va el asunto...

Por ejemplo. Si a una págnia Web llega una variable vía "HTTP GET", y yo no traspaso dicha variable adrede a otra página Web... ¿cómo va a estar en esta última página la variable que pasé a la primera? No me queda claro, no lo entiendo. :confused:

selman
01-09-2006, 19:36:04
Como les comenté en el mensaje inicial, desarrollé un portal usando tecnología .NET con Delphi 2005.
Para navegar en el portal y consultar la información el usuario debe estar previamente registrado con Usuario y Contraseña. Una vez que entras y navegas por las distintas páginas del portal se van quedando en el Explorador (en su historial) las direcciones de la páginas y los parámetros que acompañaron las páginas cuando navegó. Esto hace que cualquier usuario simplemente viendo toda la dirección de páginas visitadas en el Explorador pueda entrar al portal sin necesidad de pasar por la página de identificación, perdiendo toda la seguridad y confidencialidad.

Selman.

dec
01-09-2006, 20:58:06
Hola,

Es que no debería suceder que una URL contuviera los datos de entrada a tu aplicación ni ningún otro dato "confidencial". En lugar de utilizar variables "HTTP Get" deberías utilizar variables "HTTP Post" (yo hablo pensando en PHP, pero, supongo que igual da, que podemos entendernos). Estas no viajan a través de las URL y, por tanto, en ese sentido al menos están a salvo.

selman
01-09-2006, 22:19:39
David, la verdad es que no se trabajar con variables "HTTP Post" , si alguien me puede explicar como hacer esto en una aplicación aspx se lo agradecería para conseguir la seguridad en los datos de mi portal.

Selman.

dec
02-09-2006, 04:47:55
Hola,

Aclaro antes que nada que lo mío no es ASP .NET, que, aunque he leído algos sobre ello el caso es que no me parece ni mucho menos suficiente. Bueno. Esto lo digo más que nada por aclarar que seguramente existen diferentes maneras de llevar a cabo lo que nos ocupa. Yo he buscado un poco por Internet y creo que la que propondré puede valer.

¿Cómo demonios estás enviando las variables de página en página? ¿Conformas las URLs "a mano" o utilizas formularios cuyo método sea "GET"? Si es esto último, es cuestión de cambiar de método en el formulario, y pasar a utilizar "POST". En todo caso, en algún sitio tienes que estar "recibiendo" las variables y sus correspondientes valores; pues bien, lo mismo que haces con "GET" has de hacer con "POST", como luego se verá.

Todavía el formulario no estaría completo sino contara con el valor adecuado para su atributo "action". Estamos hablando de formularios HTML comunes y corrientes. En el parámetro "action" de estos se especifica la URL de la página que habrá de recibir los datos del formulario. Esto vale tanto para el método "GET" como para el método "POST". Y es lo mismo para PHP, que para ASP .NET, por ejemplo.

Bien. Tenemos el siguiente documento de ASP .NET que albergará un formulario para realizar las pruebas con el envío de variables "HTTP POST":


<%@ Page Language="c#" Debug="true" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="pruebas_http_post.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>ClubDelphi.com - Pruebas con variables HTTP POST</title>
</head>
<body>
<form id="frmregistro" method="post" action="WebForm1.aspx">
<fieldset>
<legend>Datos de usuario</legend>
<div>
<input name="usuario-login" id="usuario-login" />
<label for="usuario-login">Login de usuario</label>
</div>
<div>
<input type="password" name="usuario-contrasena" id="usuario-contrasena" />
<label for="contrasena-nombre">Contraseña de usuario</label>
</div>
</fieldset>
<div><input type="submit" value="Enviar..." />
</div>
</form>
</body>
</html>


Se ve que especificamos el método "POST" para el formulario, y como "action" especificamos la misma página, el mismo documento que contiene el formulario, que se encargará de procesar los datos como luego se verá.

Sabes que a cada página Web de ASP .NET le corresponde un "código asociado" que se ejecutará en el Servidor. Supongo que no siempre será así, pero, en este caso sí que lo es. Y este es el archivo que contiene el código (CSharp en este caso) asociado a la página Web anterior:


using System;

namespace pruebas_http_post
{
public class WebForm1 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
if( (Request.Form["usuario-login"] != null)
&& (Request.Form["usuario-contrasena"] != null) )
{
Response.Write("<h3>Datos enviados</h3>");
Response.Write("<ul>");
Response.Write("<li>Login de usuario: "+ Request.Form["usuario-login"] +"</li>");
Response.Write("<li>Contraseña de usuario: "+ Request.Form["usuario-contrasena"] +"</li>");
Response.Write("</ul>");
}
}

override protected void OnInit(EventArgs e)
{
InitializeComponent();
base.OnInit(e);
}

private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
}
}


Como se ve, para el ejemplo nos valemos del evento "Page_Load" conque cuenta el objeto "Page". Dentro de este evento (en el ejemplo, no creo que sea obligado hacerlo aquí), digo, es donde "buscamos" posibles variables "POST" enviadas a la página en cuestión. En realidad podría decirse que se está a la espera de ellas, que se sabe que llegarán tarde o temprano.

El asunto es igual en PHP que en ASP .NET, como vengo diciendo, y supongo que igual que en cualquier lenguaje de similares características y objetivos. Así, si en PHP accedemos a las variables "POST" a través del Array "super global" "$_POST", en ASP .NET podemos acceder a dichas variables a través de la variable "Request.Form", que es del tipo "NameValueCollection", es decir, que alberga un Array de "pares" de variables/valor.

De ahí que hagamos algo como: "Request.Form["usuario-login"]" para acceder a las variables que nos interesan. Se puede ver de dónde salen los nombres de las variables... "usuario-login" y "usuario-contrasena" se corresponden con los nombres que dimos a los correspondientes "campos" (casillas "input") en el formulario desde el que provienen los datos.

Y... no quiero enrollarme mucho más... si te queda alguna duda coméntala por aquí que no faltará quien trate de echarte una mano. Adjunto el ejemplo para que puedas "comprobarlo" tú mismo y hagas tus pruebas, cambiando alguna que otra cosa, añadiendo, quitando, en fin, como mejor te parezca. ;)