在描述问题之前,我将向您介绍我允许此xss曝光的背景。
上下文
我依赖外部API。 API返回的其中一个字段是html(已编码)。我可以解码它并在页面中显示它而不用担心,因为他们没有兴趣引入恶意代码。我发现的问题是他们的html并不总是有效,如果按原样显示它会破坏页面。所以现在我在iframe上显示它,这样它就不会破坏任何东西。
代码
我在主页面的隐藏文本区域中有html编码的字符串,它嵌入了这样的iframe:
<textarea id="my-data" class="hidden">
<?php echo $mydata;?>
</textarea>
<div>
<iframe src="/iframepage" frameborder="0" style="padding:0;width:100%;height:400px;">
</iframe>
在我的iframe页面中,我有这个HTML:
<div id="my-data">
</div>
这个jquery代码:
$(document).ready(function() {
if ($('#my-data', window.parent.document).length){
$parentJobDescription = $('#my-data', window.parent.document);
$('#my-data').html($parentJobDescription.val());
}
});
问题描述&amp;问题
答案 0 :(得分:1)
如果有人嵌入iframe页面,我会产生什么样的风险 一个包含id为“my-data”字段的恶意代码的页面?
输出
X-Frame-Options: SAMEORIGIN
响应标头会阻止您的框架页面被其他任何人(source)框起。
即使他们确实对您的回复进行了构建,但由于Same Origin Policy,恶意网站无法读取内容。
但是,由于像Clickjacking这样的攻击,最好还是输出这个标题。
另请注意,X-Frame-Options
目前正在逐步取消CSP's frame-ancestors,因此暂时为旧浏览器支持和新浏览器支持输出两个标头会很有用。
答案 1 :(得分:0)
为了确保安全,请不要在父级中执行任何操作,删除文本框并将所有内容移至iframe页面:
<div id="my-data">
<?php echo $myData; ?>
</div>
...无论你从哪里获得$myData
,都需要放在这里。