2009-03-26 9 views
2

Wäre es möglich, Login-Felder auf JEDER Website mithilfe von Javascript zu erkennen? IE und Firefox haben die Möglichkeit, sich an meinen Benutzernamen und mein Passwort zu erinnern. Ich möchte ein Skript erstellen, das diese Funktionalität repliziert. Wie könnte ich zum Beispiel bei der Präsentation der Login-Seite für Google Mail den Benutzernamen und das Passwortfeld "finden" und sie erhalten/setzen?Anmeldefelder erkennen

+0

oh du Hacker Sie! –

Antwort

2

Nun ja, eine Methode (die ich fast sicher bin einer des Browser verwendet) wäre das erste < input type = „password“ >, zu finden und dann für den < Eingabetyp suchen = „text“ > vor es.

0

Ich denke, Benutzer/Passwort merken Funktion in Browsern wird durch ein Vorhandensein eines Passwort-Typ Eingabefeld im Formular ausgelöst.

Als nächstes müssen Sie nach den häufigsten Login-Feldern suchen: name d 'Login', 'Benutzer', 'Benutzername', 'j_username' (falls es eine JAAS-basierte Website gibt). Wenn Sie dies nicht tun, speichern Sie einfach alle Texteingabefelder. ;)

1

AFAIK, das IE und Firefox Passwort-Erkennung Sachen basiert lose auf den Namen des Feldes, das heißt, es fragt Sie, ob Sie das Wort Benutzername und/oder Passwort in der ID haben.

Wenn Sie jQuery verwenden, könnten Sie etwas wie verwenden.

$('input[id*=username]').css('background', 'red'); 
// or 
$('input[id*=password]').css('background', 'red'); 

Zusätzlich können Sie für jede Kennwortfelder überprüfen jQuery von

$(':password').css('background', 'red'); 
+1

Dies ist nicht möglich, da mehrere Websites den Namen wie * uname *, * usrname *, * usr_name *, * login * verschleiern. –

0

Grundzüge:

  1. Sammeln Sie alle Passwort-Felder
  2. Schleife durch alle von ihnen
  3. Bei jeder Iteration:
    1. Finden Sie die < Form/>, dass das Passwort-Feld ein Teil
    2. Finden Sie das erste Eingabefeld in der Form, dass 1) nicht das Passwort-Feld ist, und 2) nichts anderes als type = „text“
  4. ein Array aller Benutzernamen/Passwort-Paare

Beispiel output:

[ [ <input id="username" /> , <input type="password" id="pswd" /> ] ] 

Es wird ein Array von Paaren ausgegeben, jedes Paar enthält einen Benutzernamen und einen Passwortknoten. Offensichtlich erhalten Sie auf den meisten Seiten nur ein Paar, da es nur einen Login-Bereich gibt.


Hier ist sie:

function getLoginFields() { 
    var fieldPairs = [], 
     pswd = (function(){ 
      var inputs = document.getElementsByTagName('input'), 
       len = inputs.length, 
       ret = []; 
      while (len--) { 
       if (inputs[len].type === 'password') { 
        ret[ret.length] = inputs[len]; 
       } 
      } 
      return ret; 
     })(), 
     pswdLength = pswd.length, 
     parentForm = function(elem) { 
      while (elem.parentNode) { 
       if(elem.parentNode.nodeName.toLowerCase() === 'form') { 
        return elem.parentNode; 
       } 
       elem = elem.parentNode; 
      } 
     }; 
    while (pswdLength--) { 
     var curPswdField = pswd[pswdLength], 
      parentForm = parentForm(curPswdField), 
      curField = curPswdField; 
     if (parentForm) { 
      var inputs = parentForm.getElementsByTagName('input'); 
      for (var i = 0; i < inputs.length; i++) { 
       if (inputs[i] !== curPswdField && inputs[i].type === 'text') { 
        fieldPairs[fieldPairs.length] = [inputs[i], curPswdField]; 
        break; 
       } 
      } 
     } 
    } 
    return fieldPairs; 
} 

// Usage: 
var loginFields = getLoginFields()[0]; // or loop through results. 

erfolgreich getestet auf Yahoo, Amazon, Google, Youtube ...(Verschiedene Konto/Login-Seiten)

0
// Locate the username field in the form by searching backwards 
// from the first passwordfield, assume the first text field is the 
// username. We might not find a username field if the user is 
// already logged in to the site. 
for (var i = pwFields[0].index - 1; i >= 0; i--) { 
    if (form.elements[i].type == "text") { 
    usernameField = form.elements[i]; 
    break; 
    } 
} 

Dies ist, wie Firefox funktioniert: http://mxr.mozilla.org/firefox/source/toolkit/components/passwordmgr/src/nsLoginManager.js#655