这种xss曝光有多大风险,以及如何使其更安全

时间:2016-01-11 17:38:20

标签: php xss

在描述问题之前,我将向您介绍我允许此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;问题

  1. 如果有人将iframe页面嵌入到包含恶意代码的页面中,并且ID为#34; my-data&#34;?
  2. ,我会产生什么样的风险?
  3. 我检查了阻止该网页嵌入我网站以外的网页的现有方法。我发现有一些标签可以用来告诉浏览器不要这样做,还有一些js代码可以用来防止这种情况发生。两种方法都不是很可靠。在后端,您可以配置.htaccess以防止页面嵌入外部页面。但它似乎对所有页面都没有特定页面。还有可能使这个安全吗?

2 个答案:

答案 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,都需要放在这里。