關於在IE下的一個安全BUG --可用於跟蹤使用者的系統滑鼠位置

來源:互聯網
上載者:User

IE下的DHTML有各種MS$的私人特徵,已經是眾所周知。其中有個比較有趣就是:event.screenX和event.screenY,可以獲得系統層級的滑鼠位置座標。

咋一聽,其實也覺得沒什麼。螢幕上的座標無非就是:瀏覽器用戶端區域裡的座標 + 瀏覽器視窗座標 + 客戶區位移,僅此而已。

IE本身就可以通過event和screen對象得到各種螢幕和表單位置有關的資訊。

然而,真正詭異的事還沒開始!按照標準的DOM模型定義,只有在觸發某個事件的時候,才能從event中獲得與該事件相關的參數。

也就是說,只有觸發mousemove,等這類mouseXXX滑鼠事件時,才有權擷取和滑鼠有關的參數。然而,在萬惡的IE下,任何事件觸發後,都能擷取event.screenX和event.screenY,甚至在頁面最小化時!

當然,你可能會說這還是需要依賴一個事件。然而,這裡的事件可以是任意的onxxx這類回呼函數,並非局限於UI事件。於是,我們可以人為的製造它!

最簡單的例子,給一個new Image設定一個無效的src,它的onerror事件立馬就觸發了!

於是我們可以在onerror裡擷取event.screenX,然後繼續設定無效的src,於是就可以即時跟蹤使用者螢幕層級的滑鼠指標了。因為onerror的產生不限於任何UI訊息,因此頁面最小化或非使用中下,事件仍然能夠觸發!

至於能不能擷取滑鼠或鍵盤哪個鍵被按下,很不幸,真的不可以。如果捕捉全域按鍵,哪豈不是可以監聽密碼輸入了。。。

事實上,onerror這類非UI事件的觸發,根本就沒有任何滑鼠或鍵盤參數傳入瀏覽器表單,所以也就無法擷取各種滑鼠鍵盤資訊。至於event.screenX,唯一的解釋估計它是event的一個Getter,內部直接調用了GetCursorPos這個Win API,並非事件的觸發者提供了這屬性。

如果某個頁面植入了這樣的跟蹤代碼,然後將座標位置通過socket.io即時傳送回來,豈不是很有趣。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.