Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Obtener password de un formulario web (https://www.clubdelphi.com/foros/showthread.php?t=35358)

Crandel 08-09-2006 00:22:55

Obtener password de un formulario web
 
Hola amigos, hace varios dias estoy con esto y no lo puedo resolver. Estoy desarrolando mi aplicación dentro de la cual tengo un WebBrowser. Los usuarios se loguean en él a mi servidor.

Estaba pensando intentar de cifrar los datos antes de enviarlo, entonce la idea es tomar el password y modificarlo y reenviar la peticion de pagina web.

He logrado tomar los datos del formulario de varias formas, pero el problema es que el password siembre lo recibo como *****.

Como puedo ver el valor verdadero?

Obtuve el valor haciendo uso de IHTMLElement.
Tambien usando OleObject desde el fromulario antes de enviar el submit y tambien al enviar la petición en el evento WebBrowserBeforeNavigate2, capturando el PostData.

Siempre con el mismo resultado.

alguna sugerencia?

seoane 08-09-2006 04:15:46

Vamos a ver que sale de aquí. No tengo mucha experiencia usando el TWebBrowser, pero creo que esto puede funcionar:

Código Delphi [-]
// El evento OnBeforeNavigate2 del TWebBrowser
procedure TForm1.WebBrowser1BeforeNavigate2(ASender: TObject;
  const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
  Headers: OleVariant; var Cancel: WordBool);
var
  NewPostData: OleVariant;
begin
  // Comprobamos que el PostData es un array
  if VarIsArray(PostData) then
  with TStringList.Create do
  try
    Delimiter:= '&';
    DelimitedText:= String(PChar(VarArrayLock(PostData)));
    VarArrayUnlock(PostData);
    // Usamos un parametro para saber si debemos interceptar 
    if Values['Vamos']=EmptyStr then
    begin
      // Lo paramos
      Cancel:= TRUE;
      // Añadimos 'hola' a la password (o cualquier otra modificación)
      Values['Pass']:= Values['Pass'] + 'hola';
      // Indicamos con este parámetro que la petición ya ha sido modificada
      Values['Vamos']:= 'Si';
      NewPostData:= VarArrayCreate([0, Length(DelimitedText)], varByte);
      StrCopy(PChar(VarArrayLock(NewPostData)),PChar(DelimitedText));
      VarArrayUnlock(NewPostData);
      // Volvemos a llamar al método navigate con los el PostData modificado
      (ASender as TWebBrowser).Navigate2(URL,EmptyParam,EmptyParam,
        NewPostData,EmptyParam);
    end;
  finally
    Free;
  end;
end;

Bueno, seguro que se puede hacer mejor, pero es un comienzo. Por cierto 'Pass' es el nombre que tiene el campo password en el formulario y 'Vamos' tiene que ser un nombre que no corresponda con el de ningún campo del formulario.

Crandel 08-09-2006 13:49:01

Hola seoane, gracias por la ayuda, el codigo que me pasaste era aproximadamente lo mismo que estaba haciendo yo en uno de los métodos.

Igualmente lo modifique para usar TStringList, con lo que quedo mucho mas prolijo :D

Como era muy parecido a lo que estaba haciendo, obtuve el mismo resultado.

Igualmente descubri cual era mi problema, el tema es que no responde bien cuando el usuario no teclea la clave.

En este caso te devuelve **** que es lo que me estaba pasando.

Si el usuario teclea la clave te devuelve la clave correcta

Gracias

seoane 08-09-2006 14:15:47

Cita:

Empezado por Crandel
Igualmente descubri cual era mi problema, el tema es que no responde bien cuando el usuario no teclea la clave.

En este caso te devuelve **** que es lo que me estaba pasando.

Si el usuario teclea la clave te devuelve la clave correcta

:confused: No entiendo, la información que aparece en PostData es la que se envía, si aparecen asteriscos, el servidor recibirá asteriscos. Yo personalmente no he podido reproducir lo que tu dices, tecleo el password en el bloc de notas, la copio al portapapeles, la pego en el formulario y la puedo leer perfectamente. Pero vete a saber que es lo que pasa :) , diferentes versiones del explorer, diferentes versiones de windows, etc ...

De todas formas, si vas a utilizar algo similar, recuerda que tanto los nombres, como los valores de cada parámetro están codificados. No lo incluí en mi código por simplificarlo, pero en el truco 62 describo las funciones urlencode y urlencode que se utilizan para codificar los parámetros.

Por ejemplo se tendria que utilizar algo como esto:
Código Delphi [-]
Values[UrlEndoce('Pass')]:= UrlEncode(UrlDecode(Values[UrlEndoce('Pass')]) + 'hola');

:) O algo parecido.

Crandel 08-09-2006 15:07:58

El problema surge cuando la clave esta guardada de forma automática por el mismo IE, con la opción de guardar contraseñas.

Si el usuario la teclea o ingresa de cualquier forma se ve correctamente.


La franja horaria es GMT +2. Ahora son las 09:41:36.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi