2009-03-26 7 views
2

javascriptを使用して任意のウェブサイトのログインフィールドを検出する方法はありますか? IEとFirefoxには私のユーザー名とパスワードを「記憶」する機能があります。その機能を複製したスクリプトを作成したいと思います。例えば、Gmailのログインページを表示するときに、どうすれば 'ユーザー名とパスワード'フィールドを見つけて取得/設定することができますか?ログインフィールドの検出

+0

ああ、あなたのハッカーます! –

答えて

2

まあ1つの方法(私はブラウザのいずれかを使用して、ほぼ確信していることを)最初<入力タイプ=「パスワード」>を見つけること、そしてそれ以前に<入力タイプ=「テキスト」>を探しますそれ。

0

ブラウザのユーザー/パスワード記憶機能は、フォームにパスワードタイプの入力フィールドがあることによってトリガーされると思います。

次に、最も一般的なログインフィールドname d 'login'、 'user'、 'username'、 'j_username'(JAASベースのサイトがある場合)を探してください。そうでない場合は、すべてのテキスト入力フィールドを保存してください。 ;)

1

AFAIK、IEとFirefoxのパスワード検出機能は、フィールドの名前に疎遠に基づいています。つまり、IDにユーザー名またはパスワードという単語がある場合は入力を求められます。

jQueryを使用する場合は、次のようなものを使用できます。

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

また、あなたは

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

* uname *、* usrname *、* usr_name *、* login *などのいくつかのWebサイトでは、名前が難読化されているため、これは実現不可能です。 –

0

でのjQueryを使用して、任意のパスワードフィールドをチェックすることができる基本的な概要:

  1. それらのすべて
  2. をループ
  3. すべてのパスワードフィールドを収集します各繰り返しで:
    1. パスワードフィールドが
    2. の一部は、1)ないパスワードフィールドおよび2)ないタイプ=「テキスト」
    3. 以外の形で最初の入力フィールドを検索していることを<フォーム/ >を探します
  4. 戻り、すべてのユーザ名/パスワードのペアの配列

出力例:

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

ペアの配列を出力し、各ペアにはユーザー名とパスワードのノードが含まれます。明らかに、ほとんどのページでは、ログインセクションが1つしかないので、1つのペアを取得します。


ここにある:ヤフー、アマゾン、グーグル、YouTubeで正常にテスト

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. 

...(様々なアカウント/ログインページ)

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; 
    } 
} 

これは、Firefoxが行う方法です:http://mxr.mozilla.org/firefox/source/toolkit/components/passwordmgr/src/nsLoginManager.js#655

関連する問題