ÅßA¿Û{ð¶í¶íÇñÅ¢éÌÅ·ªADOM based XSSÌbª¢Ä Á½ÌÅAµ¾yµÄ¨±¤Æv¢Ü·B
¿Û{©çøp
DOM based XSSÆÄÎêéXSSª èÜ·B±êÍAJavaScriptÉæèNCAg¤Å\¦·éÓª èA»±ÉÆ㫪 éêÌXSSÅ·B
Tv¢ÄÝܵ½B
<script> document.write(unescape(location.href)); </script>
±¢ÂðKÈt@C¼ÅÛ¶µÄAdomxss.html#<script>alert("hello")<script>ÈÇÌURLÅANZX·éÆalertª\¦³êé͸ŷBCÓÌXNvgªÀsÂ\ÈóÔÁıÆÅ·ËBCÓÌXNvgªÀsÂ\ÁıÆÍAZbVNbL[ÝúèÅA¼lɬèÏܵĢ¨Å«¿áÁ½è·éxÅ·B
«¢ÌÍdocument.write()âinnerHTML¾
áÍ©Èèí´Æ絢ŷªAdocument.write()âinnerHTMLÆ¢Á½A¶»ÌÜÜð«o·\bhâvpeBðg¤ÆA»±ÉDOM based XSSªÂ\ÉÈé]nª¶ÜêÜ·B
ÎôƵÄÍhtmlðGXP[v·éA¿áñƵ½ev[gGWðg¤AEFuWÌDOM APIðg¤ÈǪ°çêÜ·B
DOMðgÁ½Îôá
DOMÌAPIÍKØÈGXP[vð©®ÅsÁÄêé½ßAXSSÌÎôÉÈèÜ·B½Æ¦Î³Á«ÌÆãÈR[hͱñÈɯÎOKB
<script> onload=function(){ document.body.appendChild(document.createTextNode(location.href)); }; </script>
µ©µinnerHTMLÌûªlCÒH
uDOM vs innerHTMLvÅOOéÆAptH[}Xðär·éLª½³ñ©Â©èÜ·BÈ©È©är·éÌÍïµ¢¯êÇAPÈ«\ž¦ÎinnerHTMLÌûª¬¢XüÉ é絢ŷËB
ÆDOMÌAPIÍÊ|³¢±Æª½¢Å·Bdocument.createElement()Æ©appendChild()µÜéæèÍAinnerHTMLŶñAµ¿áÁ½ûªy©àµêÈ¢B
ÈÌÅAæOÒÌüÍðó¯t¯éª¾¯¿áñÆDOMÅ¢ÄAOüÍÌüèÞ]nÌÈ¢ª¾¯innerHTMLÅA®ç¢ªæ¢Æv¢Ü·B
½¾AAA±¤¢¤innerHTMLðÎèÎègÁ½LªA¢¾ÉlCðWßéƱëð©éÆAuDOMÌ«·¦ÍinnerHTMLðgÁÄàÌÈñÅ·ËI`vݽ¢È¨á¢ð·élª½»¤ÅA¡ÌóµÍÇÈ¢CªµÄ¢Ü·B
¾¢½¢±Æ
- DOM APIÆinnerHTMLÍ¿ÅÍÈ¢BptH[}X¾¯Åär·éÌÍiZXB
- innerHTMLÍë¯È«ûÅ éB½Åà©ñÅàinnerHTMLðg¤ÌÍâß½ûª¢¢B
- JavaScriptɾÁÄXSSðìèÞÂ\«ª éBDOM based XSSÍवüm³êé׫
àÁÆÚµmè½¢lÍ
DOM based XSSͱ±ª©ÈèÚµ¢Bp꾯ÇB
DOM based XSS Prevention Cheat Sheet - OWASP
`ªÌ¿Û{ÁÄÌͱê̱ÆËBT[o[TChÌbª½¢¯ÇAWeb®³ñÍmÁĨ׫àeB(DOM based XSSÍp115ÌÓè)
ÌnIÉwÔ ÀSÈWebAvP[VÌìèû@Æ㫪¶Üêé´ÆÎôÌÀH [å^{] / ¿Û _ (); \tgoNNGCeBu (§)
nCptH[}XJavaScriptÉDOMÆinnerHTML̬xärÌLªÚÁĽBip37 3ÍÌ ½èj
nCptH[}XJavaScript [å^{] / Nicholas C. Zakas ();
ì M¾ (|ó); IC[Wp (§)
innerHTMLðgíÈ¢DOMÌQl}BuDOM ScriptingvIȼOÌ{Èç ÜènYÍÈ¢Cª·éBͱêÅ׵ܵ½ªA¼Éࢢ{ª é©àµêÈ¢B
WebWeLXg(1) DOM Scripting (WebWeLXgV[Y) [Ps{i\tgJo[j] / Ãâ× ê_ (); Zp]_Ð (§)
keyword: javascript Security