<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    于吉吉的技術(shù)博客

    建造高性能門戶網(wǎng)

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      65 隨筆 :: 6 文章 :: 149 評論 :: 0 Trackbacks
    對很久以前的一個(gè)bug進(jìn)行分析和總結(jié)

         function parsePost(data, action) {
             
    try {
                 
    var postData = eval("(" + data + ")");
                 
                 
    // TO DO1
             } catch (e) {
                 
                 
    // TO DO2
             }
         }


    這是一段頁面的老代碼,data是數(shù)據(jù)庫body字段,既是用戶錄入并取出的數(shù)據(jù),由于業(yè)務(wù)的關(guān)系,data是以json格式保存的,為了使數(shù)據(jù)能實(shí)現(xiàn)兼容,這里使用try...catch...方式處理,如果變量data能被轉(zhuǎn)換成對象,則執(zhí)行TO DO1,否則執(zhí)行TO DO2.
    我們知道eval的作用很簡單,就是把一段字符串傳遞給js解析器,由javascript解析器將這段字符串解釋成為javascript代碼,并且執(zhí)行.不過這也是非常危險(xiǎn),尤其是在給它傳遞用戶輸入的數(shù)據(jù)時(shí),這往往就是惡意用戶的一個(gè)切入點(diǎn).
    安裝上面的代碼,如果用戶輸入的data是一段js代碼,如"alert('hello')",那么這段代碼用數(shù)據(jù)庫出來后顯示部分就會(huì)eval("alert('hello')"),這時(shí)我的頁面就會(huì)以alert提示框的方式彈了出來.

    好了,這個(gè)就是大家都知道的 Cross-site scripting (XSS),中文翻譯是跨站腳本攻擊。

    Cross-site scripting (XSS) is a type of computer security vulnerability typically found in web applications which allow code injection by malicious web users into the web pages viewed by other users. Examples of such code include HTML code and client-side scripts. (摘自《Cross-site scripting》http://en.wikipedia.org/wiki/Cross- site_scripting)這里介紹了 XSS 的背景,類型,利用和防范等幾方面內(nèi)容。

    下面開始修復(fù)工作。這段代碼顯然沒能對 data 作好嚴(yán)格的判斷工作,data 不但是用戶輸入的內(nèi)容,還要被似乎萬惡的 eval() 函數(shù)執(zhí)行,而整個(gè)過程沒有對 用戶輸入的 data 進(jìn)行一個(gè)校驗(yàn)工作,這就是問題所在,而且問題相當(dāng)嚴(yán)重。

    針對跟貼系統(tǒng)此段代碼的業(yè)務(wù)邏輯,可以通過判斷 data 的數(shù)據(jù)類型來確定其邏輯結(jié)構(gòu),更改后的代碼如下∶

         function parsePost(data, action) {
             
    if (typeof(data) == 'string') {
                 
                 
    // TO DO2
             }
             
    else {
                 
    // TO DO1
             }
         }


    代碼在主體上修改如上,我們的選擇是,繞開 eval() 函數(shù),把 body 的原型賦給 Javascript 的變量 data,然后使用 typeof() 來對 data 作判斷處理,并且根據(jù)此判斷繼續(xù)下一步的處理。
    另外也可以是使用 JSON 解析器對 JSON 進(jìn)行解析,可從http: //www.json.org/json.js 下載的參考實(shí)現(xiàn)腳本。JSON 是一種基于文本的開放式數(shù)據(jù)交換格式(請參見 RFC 4627)。

    ps:此bug發(fā)生在2008年,跟帖受xss攻擊
    posted on 2010-12-15 11:31 陳于喆 閱讀(4360) 評論(2)  編輯  收藏 所屬分類: web開發(fā)

    評論

    # re: Javascript eval()使用上需要注意的安全問題[未登錄] 2015-12-06 14:33 啊啊
    alert(1)  回復(fù)  更多評論
      

    # re: Javascript eval()使用上需要注意的安全問題[未登錄] 2016-05-19 10:03 123
    454564564564  回復(fù)  更多評論
      

    主站蜘蛛池模板: 亚洲精品资源在线| 亚洲国产日韩在线成人蜜芽| 亚洲AV无码一区二区一二区| 香蕉97超级碰碰碰免费公| 亚洲欧洲久久精品| 免费在线视频你懂的| 亚洲精品亚洲人成在线观看麻豆| 在线观看特色大片免费网站| 久久精品国产亚洲综合色| 成人精品一区二区三区不卡免费看| 亚洲AV永久无码精品水牛影视| 在线观看肉片AV网站免费| 日本久久久久亚洲中字幕| 日本免费一区二区三区四区五六区| 久久久久亚洲AV无码网站| 亚洲免费人成视频观看| 亚洲精品福利你懂| 国产成人在线观看免费网站 | 亚洲最大的视频网站| 一个人免费高清在线观看| 亚洲欧美日韩中文无线码| 免费真实播放国产乱子伦| 国产精品极品美女自在线观看免费| 亚洲人成人无码网www电影首页| 四虎成人精品永久免费AV| 亚洲另类古典武侠| gogo全球高清大胆亚洲| 中文字幕乱码免费看电影| 亚洲综合久久1区2区3区| 97人伦色伦成人免费视频| 一区二区免费国产在线观看| 亚洲国产综合专区在线电影| 成年美女黄网站18禁免费| 无码毛片一区二区三区视频免费播放 | 美女无遮挡免费视频网站| 国外亚洲成AV人片在线观看| 猫咪免费人成网站在线观看| 国产精品亚洲AV三区| 久久国产亚洲电影天堂| 美女被免费视频网站a国产| 国内精品免费视频精选在线观看|