国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Ajax讓Sohu郵箱成為垃圾郵件的幫兇

Ajax讓Sohu郵箱成為垃圾郵件的幫兇

出處:it168 作者:空虛浪子心 時(shí)間:2007-6-10 1:03:49

 【IT168 專(zhuān)稿】今天,電子郵箱(E-mail)無(wú)疑已經(jīng)成為大眾通訊的工具;由于垃圾郵件泛濫,E-mail也成為信息安全的重大隱患之一。搜索到有效郵件地址成為垃圾郵件發(fā)送成功與否的決定要素。隨著Ajax新興技術(shù)在大型網(wǎng)站,如SOHU等得到應(yīng)用,使得垃圾郵件制造者有機(jī)可乘。

    現(xiàn)在瀏覽器端以 JavaScript 為核心,基于各種 Web 標(biāo)準(zhǔn)(即:早已完成標(biāo)準(zhǔn)化的XHTML/CSS/DOM/XML/XSLT 和正在進(jìn)行標(biāo)準(zhǔn)化的XMLHTTP)的技術(shù)正在加速整合,Ajax 就是這一系列技術(shù)的一個(gè)統(tǒng)稱(chēng)。其關(guān)鍵在于對(duì)瀏覽器端的JavaScript、DHTML和與服務(wù)器異步通信的組合。使用Ajax,可以使B/S(瀏覽器/服務(wù)器)模式的程序出現(xiàn)類(lèi)似于C/S(客戶機(jī)和服務(wù)器結(jié)構(gòu))的即時(shí)動(dòng)態(tài)cool效果,實(shí)現(xiàn)不刷新頁(yè)面,動(dòng)態(tài)改變頁(yè)面數(shù)據(jù)。

    目前很多大型的網(wǎng)站已經(jīng)大范圍使用了Ajax技術(shù),比如我們經(jīng)??吹降模篻oogle搜索時(shí)出來(lái)的搜索次數(shù)以及可能搜索到的下拉列表、在注冊(cè)用戶時(shí)輸入用戶名后,自動(dòng)顯示該用戶是否可以被注冊(cè)等等。然而這項(xiàng)技術(shù)在給用戶帶來(lái)便利的同時(shí),若是考慮不周也會(huì)給帶來(lái)一定的安全隱患。

    我們知道在開(kāi)發(fā)程序用戶登陸模塊,處理用戶登錄失敗時(shí),出于安全方面考慮,不能返回給用戶具體的“密碼錯(cuò)誤”或“用戶名錯(cuò)誤”,而要說(shuō):“用戶名或密碼錯(cuò)誤”。(如圖1)
 

(圖1)
 
    既然這樣,當(dāng)然就不能在其他地方給用戶返回,具體是用戶名錯(cuò)誤還是密碼錯(cuò)誤。但是有些網(wǎng)站采用Ajax技術(shù)之后,雖是給用戶帶來(lái)便捷為目的,卻犯了這樣的錯(cuò)誤。據(jù)筆者經(jīng)過(guò)一系列的測(cè)試發(fā)現(xiàn),國(guó)內(nèi)很多門(mén)型網(wǎng)站的郵件系統(tǒng)都存在這樣的漏洞, SOHU、網(wǎng)易、21CN等都犯了上述錯(cuò)誤。我們就以Sohu為例,看看垃圾郵件制作者是如何利用其email帳戶暴露漏洞,得到有效郵件地址列表的。

    說(shuō)到如何暴出郵件系統(tǒng)的email帳戶,有些讀者已經(jīng)想到本文開(kāi)頭的例子“在注冊(cè)用戶時(shí)輸入用戶名后,自動(dòng)顯示該用戶是否可以被注冊(cè)”,說(shuō)的就是這個(gè)例子。大家可以去sohu注冊(cè)一個(gè)帳戶:http://passport.sohu.com/web/signup.jsp,輸入用戶名,光標(biāo)移到“請(qǐng)輸入密碼”的輸入框,如果這個(gè)用戶存在,馬上后面會(huì)提示:(圖2)
 

(圖2)

     如果不存在,則提示:

(圖3)      
  那么這兩個(gè)信息是怎么來(lái)的呢?這里的Ajax處理流程是,JavaScript調(diào)用了相應(yīng)的XMLHttpReques對(duì)象去訪問(wèn)一個(gè)web應(yīng)用程序,然后獲取返回結(jié)果后,直接把返回的結(jié)果輸出到頁(yè)面。

    部分源代碼:

<script language="JavaScript">
…...
  var checkusername = false;
        function getMyHTML(serverPage, objID) {
   var Ajax = GetO();
      var obj = document.getElementById(objID);       Ajax.open("GET", serverPage, true);
      Ajax.onreadystatechange = function() {
//服務(wù)器返回狀態(tài)為4(數(shù)據(jù)全部接收完成)并且http返回值為200(正常訪問(wèn))
          if (Ajax.readyState == 4 && Ajax.status == 200) {
//把responseText(返回值替換層的html代碼)
      obj.innerHTML = Ajax.responseText;
          }
      }
      Ajax.send(null);
  }
//創(chuàng)建XMLHttpReques對(duì)象
  function GetO(){
      var Ajax=false;
      try {
       Ajax = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
        Ajax = new ActiveXObject("Microsoft.XMLHTTP");
       } catch (E) {
        Ajax = false;
       }
      }
      if (!Ajax && typeof XMLHttpRequest!=‘undefined‘) {
       Ajax = new XMLHttpRequest();
      }
      return Ajax;
  }
//檢查用戶名的方法
//在username輸入框的onchange事件中調(diào)用了CheckUserName方法。
function CheckUserName(time){
 if(document.form1.username.value!=""){
getMyHTML("check.jsp?operator=checkusername&username="+document.form1.username.value+"&userdomain="+document.form1.userdomain.value+"&time="+time,"div_username");
 }
}
……
</script>

    可以看出,它訪問(wèn)了check.jsp頁(yè)面驗(yàn)證用戶名是否存在,把地址簡(jiǎn)化一下然后直接輸入地址欄訪問(wèn):

(圖6)

    在必要的參數(shù)中,operator是用來(lái)判斷調(diào)用不同驗(yàn)證方法的(該check頁(yè)面提供了幾種不同的驗(yàn)證,還有兩次密碼是否一致等等),userdomain是域名,sohu有幾個(gè)不同域名的郵箱,username就是用戶名了,而代碼中的time應(yīng)該是為了保證每次get提交的時(shí)候讓瀏覽器不緩存而設(shè)的(沒(méi)有細(xì)看,不重要)。所以,三個(gè)參數(shù)中主要是username發(fā)生變化,而服務(wù)器僅僅返回兩種不同的結(jié)果。

    這樣就很利于我們爆破用戶名了,還記得我們?cè)趺幢┝ζ平忄]箱密碼么?掛字典,然后不斷提交,判斷服務(wù)器返回字符中有沒(méi)有特定的字符,破解的速度取決于網(wǎng)速和返回字符的多少。正常的訪問(wèn)是返回一個(gè)頁(yè)面,這樣就有一堆垃圾數(shù)據(jù)。然而Ajax告訴我們,只要從服務(wù)器返回“0”和“1”就可以作出判斷,所以這里返回的更少了,僅僅是:

(圖7)

    為此,我們完全可以可以嘗試使用其他更方便的語(yǔ)言寫(xiě)出工具,用于搜集有效郵件地址,速度一定很快。很多大網(wǎng)站都使用了這樣的驗(yàn)證方法,就不一一例舉了。我已經(jīng)仿照Ajax使用JAVASCRIPT寫(xiě)個(gè)爆sohu用戶名測(cè)試程序,相關(guān)代碼在這里不在本文列出來(lái)了。有興趣的朋友可以去論壇(http://www.ixpub.net/thread-654600-1-1.html)查看。

    我列舉了大家可能經(jīng)常想到的一些解決方案:
    1、判斷request的來(lái)源地址。這樣的方式不推薦,因?yàn)楹诳涂梢愿膆ttp包頭,從而繞過(guò)檢測(cè)。
    2、采用驗(yàn)證碼。也不推薦,請(qǐng)各位大大想一下用戶的感受,剛輸入用戶名就讓我輸入注冊(cè)碼?這樣Ajax意義何在?
    3、給一個(gè)IP在一個(gè)小時(shí)內(nèi),分配一些份額,比如500個(gè)(考慮到網(wǎng)吧等等多臺(tái)機(jī)器一個(gè)IP,使用NAT的地方)。
    4、返回隨機(jī)圖片。這是我自己設(shè)想了一種解決方案,沒(méi)有經(jīng)過(guò)測(cè)試,下面詳細(xì)說(shuō)明。

    從給出的前三個(gè)方案看,都存在一個(gè)誤區(qū),認(rèn)為Ajax應(yīng)該獲得服務(wù)器返回的兩個(gè)有特殊意義的值(用戶名可用或不可用),然后再判斷,分兩種情況在頁(yè)面顯示出來(lái)不同的信息,或者把兩個(gè)不同的返回結(jié)果直接給用戶,這樣兩種經(jīng)典的處理模式,問(wèn)題就集中在“兩個(gè)不同結(jié)果的值”這里?,F(xiàn)在我們從需求出發(fā),分析用戶希望看到的結(jié)果,無(wú)非就是想知道用戶名是否可用,也就是說(shuō)最終的結(jié)果顯示在用戶容易看到的地方,而且用戶可以“看懂”信息,并可以加以區(qū)別(知道能不能使用這個(gè)用戶名注冊(cè))。而黑客(或垃圾郵件搜集者)認(rèn)為,只要用戶能看懂,程序也應(yīng)該可以看懂并預(yù)測(cè)出兩種結(jié)果,所以就有了這種暴力獲取郵箱名稱(chēng)的攻擊。如果“人”能看懂而程序不能看懂呢?舉個(gè)典型的例子,大家還記得QQ網(wǎng)站的那個(gè)令人討厭的中文驗(yàn)證碼吧?那個(gè)東西就是隨機(jī)的,程序不能預(yù)測(cè)并且用戶可以看懂。在這里也可以使用這項(xiàng)技術(shù)。直接在服務(wù)器隨機(jī)把“可以注冊(cè)”和“不能注冊(cè)”四個(gè)字,做成隨機(jī)圖片,文字以隨機(jī)的字體和隨機(jī)的顏色出現(xiàn)在圖片中隨機(jī)的位置,然后返回給javascript,再由javascript把圖片放到網(wǎng)頁(yè)中,用戶看到的是返回的是隨機(jī)大小的圖片,暴力獲取郵箱名的攻擊就立刻失去了效果。
 

(圖8)

    是否該在這里也使用Ajax技術(shù),無(wú)所謂對(duì)錯(cuò),只要大網(wǎng)站一帶頭,這樣做的就會(huì)大有人在,只是我們?cè)谀7碌臅r(shí)候也要仔細(xì)考慮。畢竟Ajax的實(shí)質(zhì)其實(shí)是在用戶“感覺(jué)不出來(lái)”的情況下訪問(wèn)了web應(yīng)用程序,再把返回的結(jié)果交給用戶,同時(shí)用戶可以去做其他的事情,不用等待結(jié)果。既然Ajax可以訪問(wèn),惡意用戶當(dāng)然也可以自己去訪問(wèn),所以我們應(yīng)該把處理Ajax請(qǐng)求的web應(yīng)用程序像其他頁(yè)面一樣做好相應(yīng)的防范措施,就可以有效的避免安全問(wèn)題。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
iframe創(chuàng)建智能表單-Javascript/Ajax-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
用AJAX編寫(xiě)用戶注冊(cè)實(shí)例及技術(shù)小結(jié)(局部刷新)
BlogJava - eamoi之Coder日志
四種表單驗(yàn)證方法的分析和比較
AjAx的優(yōu)缺點(diǎn)
Ajax
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服