web-dev-qa-db-ja.com

CavalryLoggerとは何ですか?必要ですか?

最近引き継いだサイトで最適化を行っています。認識できないスクリプトを見つけました: http://static.ak.fbcdn.net/rsrc.php/zo/r/V95Lkt_uLNB.js

それはfacebookのものである可能性があり、いくつかのキーロギングが進行中です(私はあまり熱心ではありません)

間違いなく、ページの読み込みで要求される最大のファイル(87kb)なので、それがなくてもページの読み込みが本当に速くなります。

誰か知っている:
A)それは何ですか
B)目的
C)すること
D)それなしでできますか

36
Andyh

わかりましたので、この縮小されたコードの美化されたバージョンを見て、次のことに注意しました:

それ自体は、ユーティリティ関数の束です。

CavalryLoggerは、このファイルが存在せず、定義されていないため、それ自体では何も行いません。

キーバインディングに関する問題のコード:

function KeyEventController() {
  copy_properties(this, {
    handlers: {}
  });
  document.onkeyup = this.onkeyevent.bind(this, 'onkeyup');
  document.onkeydown = this.onkeyevent.bind(this, 'onkeydown');
  document.onkeypress = this.onkeyevent.bind(this, 'onkeypress');
}
copy_properties(KeyEventController, {
  instance: null,
  getInstance: function () {
    return KeyEventController.instance || (KeyEventController.instance = new KeyEventController());
  },
  defaultFilter: function (event, a) {
    event = $E(event);
    return KeyEventController.filterEventTypes(event, a) && KeyEventController.filterEventTargets(event, a) && KeyEventController.filterEventModifiers(event, a);
  },
  filterEventTypes: function (event, a) {
    if (a === 'onkeydown') return true;
    return false;
  },
  filterEventTargets: function (event, b) {
    var a = $E(event).getTarget();
    if (DOM.isNode(a, ['input', 'select', 'textarea', 'object', 'embed'])) if (a.type != 'checkbox' && a.type != 'radio' && a.type != 'submit') return false;
    return a.getAttribute('contentEditable') != 'true';
  },
  filterEventModifiers: function (event, a) {
    if (event.ctrlKey || event.altKey || event.metaKey || event.repeat) return false;
    return true;
  },
  registerKey: function (f, a, d, g) {
    if (d === undefined) d = KeyEventController.defaultFilter;
    var b = KeyEventController.getInstance();
    var c = b.mapKey(f);
    if (is_empty(b.handlers)) onleaveRegister(b.resetHandlers.bind(b));
    for (var e = 0; e < c.length; e++) {
      f = c[e];
      if (!b.handlers[f] || g) b.handlers[f] = [];
      b.handlers[f].Push({
        callback: a,
        filter: d
      });
    }
  },
  keyCodeMap: {
    '[': [219],
    ']': [221],
    '`': [192],
    LEFT: [KEYS.LEFT, 63234],
    RIGHT: [KEYS.RIGHT, 63235],
    RETURN: [KEYS.RETURN],
    TAB: [KEYS.TAB],
    DOWN: [KEYS.DOWN, 63233],
    UP: [KEYS.UP, 63232],
    ESCAPE: [KEYS.ESC],
    BACKSPACE: [KEYS.BACKSPACE],
    DELETE: [KEYS.DELETE]
  }
});
copy_properties(KeyEventController.prototype, {
  mapKey: function (a) {
    if (typeof (a) == 'number') return [48 + a, 96 + a];
    if (KeyEventController.keyCodeMap[a.toUpperCase()]) return KeyEventController.keyCodeMap[a.toUpperCase()];
    var b = a.toUpperCase().charCodeAt(0);
    return [b];
  },
  onkeyevent: function (i, c) {
    c = $E(c);
    var d = null;
    var g = this.handlers[c.keyCode];
    var b, f, a;
    if (g) for (var h = 0; h < g.length; h++) {
      b = g[h].callback;
      f = g[h].filter;
      try {
        if (!f || f(c, i)) {
          var node = null;
          if (window.Parent && Parent.byTag && c.getTarget) node = Parent.byTag(c.getTarget(), 'a');
          user_action(node, 'key', c);
          a = b(c, i);
          if (a === false) return Event.kill(c);
        }
      } catch (e) {}
    }
    return true;
  },
  resetHandlers: function () {
    this.handlers = {};
  }
});

このコードを使用すると、キーをコールバックにバインドでき、一般的なキーのより人間が読める名前が含まれます。以下の使用例をご覧ください。

KeyEventController.registerKey('ESCAPE', Dialog._handleEscapeKey, a);

ESCAPEキーは、ダイアログを消滅させるために登録されます。 handlersもデフォルトでは空なので、registerKeyを使用するか、手動で追加するまで何も起こりません。これは、呼び出されるregisterKeyの唯一のインスタンスであることに注意してください。

また、多くのAJAXユーティリティ関数。Originポリシーが同じであるため、ドメインからFacebookに実際に何も送信することはできません(セキュリティ権限を変更しない限り、それはあなたのせいです)。クッキーセットについても同じことが言えます。

履歴マネージャーもありますが、iFrameを使用しているため、ドメインからそれを読み取ることができません。

最後に、私が見つけた「いいね」ボタンのコードはiFrameなので、JavaScriptを使用してiFrameなどを作成しない限り、JSインクルードは必要ありません。

それを念頭に置いて、私はあなたがこれらすべてを含める必要があるとは思わない。

32
onteria_

これは、ページ上で「これに似た」機能を持つことに直接関係しているようです。 「いいね」ボタンを含めるために使用するiframeには、「ボーナス」スクリプトがいくつか付属しているようです。

あなたが私に尋ねると、これはFacebookが統合されていないもう一つの正当な理由です。

11
mwotton

クイックGoogle検索では多くの回答が得られません-Facebookのイベント追跡スクリプトのようなもので、ツイートと、それを無効にして速度を上げることについて言及したいくつかのフォーラム投稿を見ました-I 考えるあなたはそれを安全に取り除くことができます。少なくとも試してみる価値はあります。

1
Filipe

ダウンロードしていないファイルで「calverly logger」を見つけましたが、Thunderbirdを閉じたときに目の前でダウンロードされた(Firefoxを実行していて、ファイルのダウンロードとして表示された)ので、それを確認しに行きましただった。

このファイルは「See All.html」という名前で、奇妙で心配なものでした。

ファイルの先頭には、Facebook関数であることを示す次のコードが含まれています... Calvery Loggerは、ファイルの下部近くに記載されています(ここには表示されていません)。コードを確認できるように、ファイルの先頭付近のhtml <を削除しました...役立つかどうかはわかりませんが、洞察をお待ちしています...

// !DOCTYPE html 
html lang="en" id="facebook" class="no_js"

head
meta charset="utf-8" />

meta name="referrer" content="Origin-when-crossorigin" id="meta_referrer" />

script> window._cstart=+new Date();</script><script>function envFlush(a)    {function b(c){for(var d in a)c[d]=a[d];}if(window.requireLazy){window.requireLazy(['Env'],b);}else{window.Env=window.Env||{};b(window.Env);}}envFlush({"ajaxpipe_token":"AXiYOZarFarwOff3","lhsh":"AAQFK_mp-","khsh":"0`sj`e`rm`s-0fdu^gshdoer-0gc^eurf-3gc^eurf;1;enbtldou;fduDmdldourCxO`ld-2YLMIuuqSdptdru;qsnunuxqd;rdoe-0unjdojnx-0unjdojnx0-0gdubi^rdbsduOdv-0`sj`e`r-0q`xm`r-0StoRbs`qhof-0mhoj^q`xm`r","timeslice_heartbeat_config":{"pollIntervalMs":33,"idleGapThresholdMs":60,"ignoredTimesliceNames":{"requestAnimationFrame":true,"Event listenHandler mousemove":true,"Event listenHandler mouseover":true,"Event listenHandler mouseout":true,"Event listenHandler scroll":true},"enableOnRequire":true},"shouldLogCounters":false,"timeslice_categories":{"react_render":true,"reflow":true}}); script> style> style>
0
Don

これは間違いなくFacebookからのものです-FBML/API /などの多くのサポートファイルの1つです.

プロジェクトでFB機能を使用していない場合は、このファイルを削除してください。

FB機能(「いいね」ボタンなど)を使用している場合は、このファイル(または暗号化された名前を持つ他のファイル)も直接使用しないでください。代わりに

1)ページの最後に空の_<div id="fb-root"></div>_を作成します

2)ページに http://connect.facebook.net/en_US/all.js スクリプトを含める

3) http://developers.facebook.com/ からの指示に従います。

0
Guard

IFRAMEがロードされると、次のURIを呼び出します。

https://www.facebook.com/plugins/like.php?api_key=[your_api_key]&channel_url=http%3A%2F%2Fstatic.ak.facebook.com%2Fconnect%2Fxd_arbiter.php%3Fversion%3D27%23cb%3Df39f390d40f7332%26domain%3D[your_TLD]%26Origin%3Dhttp%253A%252F%252F[your_TLD]%252Ff72f1f9bea899e%26relation%3Dparent.parent&colorscheme=light&extended_social_context=false&href=[your_share_URI]&layout=button_count&locale=en_US&node_type=link&sdk=joey&send=false&show_faces=false&width=100

このページのスクリプトタグ内には、次の呼び出しがあります。

PluginAsyncLoader.load("**https:\/\/fbstatic-a.akamaihd.net\/rsrc.php\/v2\/yq\/r\/CNRdIwfy3yI.js**");
PluginAsyncLoader.ondemandjs = "**https:\/\/fbstatic-a.akamaihd.net\/rsrc.php\/v2\/yH\/r\/muz85bheueJ.js**";
0
supert3d