【发布时间】:2015-07-24 17:01:06
【问题描述】:
我正在尝试记录用户对包含广告的 div 中特定 iFrame 的点击,以阻止有问题的 IP 地址,从而防止那些试图向广告发送垃圾邮件的人再次点击它。在用户的每一次点击中,一条记录将被插入到 mySQL 数据库的一个表中,其中包括:
- IP 地址
- 点击次数计数器
- Unix 时间戳
每个用户/IP 地址都有权在 24 小时内点击广告 3 次。
为了检测 iFrame 广告的每次点击,我使用了iframeTracker-jquery 类并实现了如下 JavaScript 代码:
index.php:
<?php include 'AdProtection.php'; ?>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="js/jquery.iframetracker.js"></script>
<script>
jQuery(document).ready(function($) {
$('.iframetrack iframe').iframeTracker({
blurCallback: function() {
console.log("Click has been detected!");
$.ajax({
type: "POST",
url: "update.php"
);
}
});
});
</script>
</head>
<body>
<div class="iframetrack" id="adsense_frame">
<?php //Returns true when a user 's IP address isn't currently blocked by checking in Database. if(AdProtection::protectAd()) echo '<iframe width="728" height="90" src="js/demo/sample-iframe/red.html" frameborder="0" allowtransparency="true" scrolling="no"></iframe>'; ?>
</div>
</body>
</html>
更新.php:
<?php
function update($odb)
{
$sql=$odb->prepare('INSERT INTO system (ip, clicks, timestamp) VALUES(:ip, clicks+1, :timestamp) ON DUPLICATE KEY UPDATE clicks = clicks+1, timestamp = :timestamp');
$sql->execute(array(':ip' => ip2long($_SERVER['REMOTE_ADDR']),':timestamp' => time()));
}
//PDO Connection
include ( "db.php");
$sql=$odb->prepare('SELECT clicks, timestamp FROM system WHERE ip= :ip');
$sql->execute(array(':ip' => ip2long($_SERVER['REMOTE_ADDR'])));
$data = $sql->fetch();
if($data != null)
{
if($data['clicks'] % 3 == 0)
{
if(($data['timestamp'] + (24 * 60 * 60)) < time())
update($odb);
else
//User is currently blocked.
}
else
update($odb);
}
else
update($odb);
在实现这个 JavaScript 代码/jQuery POST 请求时有两个关键问题:
- 代码可以由个人操作/修改,因为 JavaScript 是一种客户端语言。
- 可以在 update.php 文件上生成垃圾邮件。
我该如何处理这些问题?
【问题讨论】:
-
为什么重要?如果您的 update.php 中的“垃圾邮件”是指快速重复访问,那么用户会很快将自己锁定。
-
如果多个机器人同时发送垃圾邮件怎么办?此外,ajax 请求可以被操作为不会向 update.php 文件发送请求。
-
我认为您需要更加明确自己的目标。为什么需要阻止广告流量?这就是广告的重点,以吸引流量。如果您对每天的点击给予赞扬,那么谁在乎他们是否超过了他们的 3 次点击。您记录他们的 3 次点击并让他们继续发送垃圾邮件。
-
我想阻止这些 IP 地址以防止垃圾广告,这就是为什么我限制每个 IP 地址在 24 小时内点击 3 次。
-
检查ip,如果ok,则显示iframe,空格如果他们已经投票3次则不显示iframe
标签: javascript php ajax security spam