使用PHP session_id()来确保我们的服务器动态生成iframe

时间:2010-05-27 08:21:52

标签: php iframe sessionid

我们使用iframe在我们的网站上展示广告。

iframe用于允许我们将广告代码和其他网站模块分开。

由于我们在网站上跟踪广告观看次数,并且需要能够准确统计哪种网页类型获得了哪些观看次数,我必须确保用户无法简单地复制粘贴iframe将广告加载到其他网站上。这会导致广告计数对此页面膨胀,并且计数与iframe“应该”显示的页面的查看次数不匹配。

在有人这样说之前:不,我不能简单地将网页浏览次数与广告查看次数进行比较,或者使用每页广告的网页浏览次数*数量,因为每页广告数量不一定是静态的。

我需要提出一个解决方案,允许广告仅针对动态生成并显示在我们网页上的iframe显示。


我对PHP会话并不熟悉,但从我有时间阅读的内容来看,以下似乎是一个可接受的解决方案:

将“s = session_id()”添加到广告iframe的src。

在接收和处理广告请求的代码中,只返回(和计数)和广告,如果s == session_id()。

如果我错了,请纠正我,但这可以确保:

广告只会返回到其页面内容的其余部分生成src的iframe,就像正常使用时的情况一样。

我们可以使用无效的session_id将徽标返回给广告调用。

所以一个简单的例子就是:

我们的一个页面:

<?php session_start(); ?>
<div id="someElement">
    <!-- EVERYONE LOVES ADS -->            
    <iframe src="http//awesomesite.com/ad/can_has_ad.php?s=<?php echo session_id(); ?>></iframe>
</div>

广告/ can_has_ad.php:

<?php session_start(); ?>
if($_GET['s'] == session_id()){
    echo 'can has ad';
}
else{
    echo '<img src="http://awesomesite.com/images/canhaslogo.jpg"/>';
}

最后,用静态's'参数复制代码:

<!-- HAHA LULZ I WILL SCREW WITH YOUR AD VIEW COUNTS LULZ HAHA -->            
<iframe src="http//awesomesite.com/ad/can_has_ad.php?s=77f2b5fcdab52f52607888746969b0ad></iframe>

哪会给他们一个iframe显示我们很棒的网站徽标,而不是我们的视图计数。

我做了一些基本的测试用例:两个文件,一个生成iframe并回显它,另一个指向iframe的src,它检查's'参数并根据结果显示适当的消息。我将iframe复制到一个文件中并将其托管在另一台服务器上,并显示正确的消息(不能有广告)。


所以,我的问题是:

这是否有用,或者我是一个PHP会话菜鸟,上面的测试总是侥幸?

谢谢你的时间!

修改:

我试图在不触及SQL服务器的情况下解决这个问题,因为该网站的其余部分非常SQL密集,而且我不想为已经蹩脚的SQL服务器添加负载......

1 个答案:

答案 0 :(得分:1)

您不应该将会话ID真正放在网址中,因为这会使其容易受到引荐来源监听。 (如果用户在网址中跟随会话ID的页面中的链接,则他们将能够在引荐来源标头中看到会话ID)

您可以考虑在服务器上发出对iFrame内容的请求(例如使用curl)并将其打印到您的页面上,而不是使用iFrame。这样,任何人都无法直接嵌入它。

您还可以考虑在加载iFrame(应该是包含页面的网址)之前检查引用标头,但是很容易伪造引用标头,因此不应将其视为“好”解决方案。

总之,我强烈建议您找到另一种方法将广告投放到您的网页上!