<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>HTMLElement on XS-Leaks Wiki</title><link>https://webapppentestguidelines.github.io/xs-leaks/abuse/htmlelement/</link><description>Recent content in HTMLElement on XS-Leaks Wiki</description><generator>Hugo -- gohugo.io</generator><language>ja-jp</language><atom:link href="https://webapppentestguidelines.github.io/xs-leaks/abuse/htmlelement/index.xml" rel="self" type="application/rss+xml"/><item><title>Element leaks</title><link>https://webapppentestguidelines.github.io/xs-leaks/docs/attacks/element-leaks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://webapppentestguidelines.github.io/xs-leaks/docs/attacks/element-leaks/</guid><description>一部のHTML要素は、クロスオリジンのページにデータの一部をリークさせるために使用される可能性があります。 たとえば、以下のようなメディアリソースは、サイズ、期間、種類に関する情報をリークさせる可能性があります。
HTMLMediaElementは、メディアのdurationとbufferedの時間をリークします。 HTMLVideoElement はvideoHeightとvideoWidthをリークします。一部のブラウザでは、webkitVideoDecodedByteCount、 webkitAudioDecodedByteCount、webkitDecodedFrameCountも含む可能性があります getVideoPlaybackQuality()はtotalVideoFramesをリークします。 [HTMLImageElement]（https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement）はheightとwidthをリークしますが、画像が無効な場合には、それらは0となり、image.decode()は拒否されます。 メディアタイプの固有のプロパティによって、メディアタイプを区別することができます。 たとえば、&amp;lt;video&amp;gt;の場合はvideoWidth、&amp;lt;audio&amp;gt;の場合はdurationといった具合です。 以下のコードは、リソースの種類を返すサンプルコードを示しています。
async function getType(url) { // リソースがaudioもしくはvideoかどうかを検知 let media = document.createElement(&amp;#34;video&amp;#34;); media.src = url; await new Promise(r=&amp;gt;setTimeout(r,50)); if (media.videoWidth) { return &amp;#34;video&amp;#34;; } else if (media.duration) { return &amp;#34;audio&amp;#34; } // リソースがimageかどうかを検知 let image = new Image(); image.src = url; await new Promise(r=&amp;gt;setTimeout(r,50)); if (image.width) return &amp;#34;image&amp;#34;; } CORBの悪用 # CORB は、間違ったコンテンツタイプが使用された場合にレスポンスを空にするChromeの機能です。 これは、コンテンツタイプが間違っている場合、キャッシュされないことを意味します。 ifCached 関数についてはCache Probingの記事にて確認できます。
async function isType(url, type = &amp;#34;script&amp;#34;) { let error = false; // urlをパージする await ifCached(url, true); // リソースの読み込みを試行 let e = document.</description></item></channel></rss>