【发布时间】:2016-04-06 10:47:26
【问题描述】:
假设一个网站 xyz.com 正在使用 JavaScript 代码展示来自我的广告网络 example.com 的广告:
<script type='text/javascript' src='http://example.com/click.php?id=12345678'></script>
将广告显示为:
click.php
<a href="http://example.com/process.php?var1=var1&var2=var2">
<img src="http://example.com/ads/banner.png"/></a>
当点击链接时,它会被带到process.php,在那里我使用一些 MySQL 查询来增加和减少余额,然后重定向到广告的 URL。
process.php
$ua = $_SERVER['HTTP_USER_AGENT'];
$ip = $_SERVER['REMOTE_ADDR'];
//invalid click
if($_SERVER['HTTP_REFERER']==null || $_SERVER['HTTP_USER_AGENT']==null) {
header("location: http://example.com");
exit;
}
我想添加到click.php 的唯一会话并在process.php 检索它以防止无效点击。我该怎么做?
更新: 下面的答案解决了一半的问题,但用户仍然可以使用 iframe 和 img 标签发送虚假点击,如下所示:
<img src="http://example.com/click.php?id=12345678" height="1px" width="1px"/>
这些点击仍在计算中,因为请求由页面click.php 和process.php 提供服务
解决办法是什么?
【问题讨论】:
-
click.php 和 process.php 是否在同一个位置?
-
见this guide to URL parameter encryption。您要么需要 AEAD,要么如果“短 URL 长度”很重要,请使用随机字符串查找而不是加密。 Don't use rand().