? ? ? ?用戶每次訪問一個網站,都是瀏覽器在和當前渲染過的網頁的DOM進行交互。即使用戶并沒有點擊網頁上的任何元素,也沒有填寫任何表單,瀏覽器也可能捕獲到一些對攻擊者有價值的信息。例如,即使用戶在網頁中點擊了幾次后又來點擊其他地方,那么瀏覽器還是已經觸發了兩個不同的事件:focus和blur。
? ? ? ?繼續之前的例子,執行下面的JavaScript代碼,就能夠監聽focus事件:
? ? ? ?window.addEventListener("focus", function(event) {
? ? ? ?alert("The window has been focused");
? ? ? ?});
? ? ? ?有一點江西網絡公司小編想說的是:IE6 到IE8 并不支持addEventListener() 方法, 不過它們可以使用功能類似的addachEvent()函數代替。jQuery提供了更加友好的on()函數,可以簡化事件監聽的操作。使用BeEF提供的jQuery后,上面的代碼會變成:
? ? ? ?$j(window).on("focus", function(event) {
? ? ? ?alert("The window has been focused");
? ? ? ?});
? ? ? ?不僅如此,jQuery還提供了focus()方法,可以進一步簡化代碼:
? ? ? ?$j(window).focus(function(event) {
? ? ? ?alert("The window has been focused");
? ? ? ?});
? ? ? ?再增加一些代碼,則我們同時可以在用戶將焦點從窗口中移除時捕獲事件:
? ? ? ?$j(window).focus(function(event) {
? ? ? ?alert("The window has been focused");
? ? ? ?}).blur(function(event) {
? ? ? ?alert("The window has lost focus");
? ? ? ?});
? ? ? ?此外,由于調用jQuery的方法時,通常返回自身的實例,所以當我們在調用多個方法時可以使用鏈式調用,就像之前那段代碼所示。這段代碼監聽了window對象上的focus和blur事件,這和BeEF初始化日志方法的代碼非常類似,不同之處在于BeEF不是調用alert()函數,而是使用之前講過的beef.net.send()函數,把事件日志傳回BeEF的服務器。
? ? ? ?在W3C的DOM 3級事件模型草案5的文檔中,焦點事件類型并不局限于blur和focus。除了document元素自身外,DOM中的任一元素都可以響應全部的焦點事件。除blur和focus外,W3C還定義了如下一些與焦點相關的事件,按它們觸發的次序排列如下:
? ? ? ?focusin:在目標元素真正獲得焦點之前觸發。
? ? ? ?focus:在目標元素真正獲得焦點時觸發。
? ? ? ?DOMFocusIn:棄用的DOM事件,推薦使用focus和focusin替代。
? ? ? ?Focusout:在目標元素改變焦點之后觸發。
? ? ? ?blur:在目標元素失去焦點時觸發。
? ? ? ?DOMFocusOut:棄用的DOM事件,推薦使用blur和focusout替代。
? ? ? ?通常來講,相比元素失去焦點時,瀏覽器會在元素獲得焦點時觸發更多事件。其中多數事件都會在響應時傳入event對象,其中包含了獲得焦點的元素的信息,以及元素在事件流中的位置等。
? ? ? ?對攻擊者而言,理解和捕獲焦點事件是非常有用的,因為通過它們,我們可以洞察到目標用戶是否正在瀏覽特定的窗口,是否已經切換到不同的標簽頁,或者是否已經將瀏覽器最小化,這些數據都可能在一個大型攻擊策略中發揮重要作用。
? ? ? ?以上所述就是關于jQuery 事件中focus() 的用法,如果還有哪些不明白的地方,可隨時來電和我們聯系。百恒網絡作為一家專業從事網站建設、微信開發、APP開發等服務的優秀江西網絡公司,自然精通各種網絡技術以及建站技術,也只有這樣才能為更多有需要的朋友服務,幫助他們解決難題。因此,只要您有需要,我們將隨時為您排憂解難!