十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
      南昌百恒網絡微信公眾號 掃一掃關注
      小程序
      tel-icon全國服務熱線:400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡微信小程序

      百恒網絡

      南昌百恒網絡

      關于模板引擎與XSS防御實施方法

      百恒網絡 2016-11-30 6184

      前面我們通過該《XSS 跨站漏洞以及釣魚式攻擊》文章闡述了XSS攻擊的危險,在 View 層,可以解決 XSS 問題。同時在《網站安全縱深防御原則的實施方法》闡述了“輸入檢查” 與“輸出編碼”這兩種方法在 XSS 防御效果上的差異。XSS 攻擊是在用戶的瀏覽器上執行的, 其形成過程則是在服務器端頁面渲染時,注入了惡意的 HTML 代碼導致的。從 MVC 架構來說, 是發生在 View 層,因此使用“輸出編碼”的防御方法更加合理,這意味著需要針對不同上下 文的 XSS 攻擊場景,使用不同的編碼方式。?
      在“跨站腳本攻擊”一文中,南昌網絡公司百恒網絡安全工程師將“輸出編碼”的防御方法總結為以下幾種:?
      ? ? ? ? 在 HTML 標簽中輸出變量;?
      ? ? ? ? 在 HTML 屬性中輸出變量;?
      ? ? ? ? 在 script 標簽中輸出變量;?
      ? ? ? ? 在事件中輸出變量;?
      ? ? ? ? 在 CSS 中輸出變量;?
      ? ? ? ? 在 URL 中輸出變量。?
      ? ? ? ?針對不同的情況,使用不同的編碼函數。那么現在流行的 MVC 框架是否符合這樣的設計 呢?答案是否定的。?
      ? ? ? ?在當前流行的 MVC 框架中,View 層常用的技術是使用模板引擎對頁面進行渲染,比如在 “跨站腳本攻擊”一章中所提到的 Django,就使用了 Django Templates 作為模板引擎。模板引 擎本身,可能會提供一些編碼方法,比如,在 Django Templates 中,使用 filters 中的 escape 作 為 HtmlEncode 的方法:?
      ? ? ? ?

      Hello, {{ name|escape }}!

      ?
      ? ? ? ?Django Templates 同時支持 auto-escape,這符合 Secure by Default 原則。現在的 Django Templates,默認是將 auto-escape 開啟的,所有的變量都會經過 HtmlEncode 后輸出。默認是編 碼了 5 個字符:?
      ? ? ? ?< is converted to <?
      ? ? ? ?> is converted to > '
      ? ? ? ? (single quote) is converted to '?
      ? ? ? ?" (double quote) is converted to "
      ? ? ? ? & is converted to &
      ? ? ? ? 如果要關閉 auto-escape,則需要使用以下方法: {{ data|safe }} 或者 {% autoescape off %} Hello {{ name }} {% endautoescape %} 為了方便,很多程序員可能會選擇關閉 auto-escape。要檢查 auto-escape 是否被關閉也很簡 單,搜索代碼里是否出現上面兩種情況即可。?
      ? ? ? ?但是正如前文所述,最好的 XSS 防御方案,在不同的場景需要使用不同的編碼函數,如 果統一使用這 5 個字符的 HtmlEncode,則很可能會被攻擊者繞過。由此看來,這種 auto-escape 的方案,看起來也變得不那么美好了。(具體 XSS 攻擊的細節在本書“跨站腳本攻擊”一章中 有深入探討)?
      ? ? ? ?再看看非常流行的模板引擎 Velocity,它也提供了類似的機制,但是有所不同的是,Velocity 默認是沒有開啟 HtmlEncode 的。?
      ? ? ? ?在 Velocity 中,可以通過 Event Handler 來進行 HtmlEncode。 eventhandler.referenceinsertion.class = org.apache.velocity.app.event.implement. EscapeHtmlReference eventhandler.escape.html.match = /msg.*/ 使用方法如下例,這里同時還加入了一個轉義 SQL 語句的 Event Handler。 ...?
      import org.apache.velocity.app.event.EventCartridge;
      ? ? ? ? import org.apache.velocity.app.event.ReferenceInsertionEventHandler;?
      ? ? ? ?import org.apache.velocity.app.event.implement.EscapeHtmlReference;?
      ? ? ? ?import org.apache.velocity.app.event.implement.EscapeSqlReference;?
      ...?
      public class Test { public void myTest() { ....?
      /** * Make a cartridge to hold the event handlers */?
      ? ? ? ?EventCartridge ec = new EventCartridge();?
      /* * then register and chain two escape-related handlers */
      ? ? ? ? ec.addEventHandler(new EscapeHtmlReference());?
      ? ? ? ?ec.addEventHandler(new EscapeSqlReference());?
      /* * and then finally let it attach itself to the context */?
      ? ? ? ?ec.attachToContext( context );?
      /* * now merge your template with the context as you normally * do */?
      .... }?
      }
      ? ? ? ? ? ? ? ?但 Velocity 提供的處理機制,與 Django 的 auto-escape 所提供的機制是類似的,都只進行 了 HtmlEncode,而未細分編碼使用的具體場景。不過幸運的是,在模板引擎中,可以實現自定 義的編碼函數,應用于不同場景。在 Django 中是使用自定義 filters,在 Velocity 中則可以使用 “宏”(velocimacro),比如: XML編碼輸出,將會執行 XML Encode輸出 #SXML($xml)?
      JS編碼輸出,將會執行JavaScript Encode輸出 #SJS($js) 通過自定義的方法,使得 XSS 防御的功能得到完善;同時在模板系統中,搜索不安全的 變量也有了依據,甚至在代碼檢測工具中,可以自動判斷出需要使用哪一種安全的編碼方法, 這在安全開發流程中是非常重要的。?
      ? ? ? ?在其他的模板引擎中,也可以依據“是否有細分場景使用不同的編碼方式”來判斷 XSS 的安全方案是否完整。在很多 Web 框架官方文檔中推薦的用法,就是存在缺陷的。Web 框架 的開發者在設計安全方案時,有時會缺乏來自安全專家的建議。所以開發者在使用框架時,應 該慎重對待安全問題,不可盲從官方指導文檔。?
      ? 本文僅限內部技術人員學習交流,不得作于其他商業用途.希望此文對廣技人員有所幫助。原創文章出自:南昌網站建設公司-百恒網絡http://www.dgscpc.com/如轉載請注明出處!

      400-680-9298,0791-88117053
      掃一掃關注百恒網絡微信公眾號
      掃一掃打開百恒網絡小程序

      歡迎您的光顧,我們將竭誠為您服務×

      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售前咨詢 售前咨詢
       
      售后服務 售后服務
       
      售后服務 售后服務
       
      備案專線 備案專線
       
      ×
      亚洲精品在线播放视频| 麻豆精品成人免费国产片| 国产精品无码久久av不卡| 97久久久精品综合88久久| 99re6在线精品视频免费播放| 国内精品手机在线观看视频| 国产精品综合专区中文字幕免费播放| 亚洲欧美日韩久久精品| 日韩有码一区二区| 国产午夜精品1区2区3福利| 精品久久久久久亚洲中文字幕| 无码日本精品XXXXXXXXX| 国产精品亚洲午夜一区二区三区| 久久精品国产亚洲AV无码麻豆 | 少妇人妻偷人精品免费视频| 亚洲日韩国产精品第一页一区| 中文字幕精品视频在线观看| 精品久久久无码中文字幕天天 | 久久久无码人妻精品无码| 久久国产精品鲁丝片| 久久精品视频99精品视频150| 国产精品揄拍100视频| 精品久久久久久国产| 国产亚洲婷婷香蕉久久精品| 国产成人精品一区二区三区无码| 精品一区二区无码AV| 久久精品国产亚洲一区二区三区| 精品国产乱码久久久久久浪潮| 亚洲国产精品第一区二区三区| 日韩精品视频在线观看免费| 日韩精品人妻系列无码av东京| 日韩免费一级毛片| 中日韩精品视频在线观看| 51午夜精品免费视频| 久久精品国产99国产精品| 人与狗精品AA毛片| 精品综合久久久久久97超人| 久久精品一区二区三区四区 | 国产精品久久久久久福利| 国产午夜久久精品| 中文字幕日韩精品一区二区三区|