Я пытаюсь записать пользовательские клики по определенному iFrame в div, содержащем рекламу, чтобы заблокировать проблемные IP-адреса, тем самым не позволяя тем, кто пытается спамить рекламу, щелкнуть ее снова. При каждом щелчке пользователя запись будет вставлена в таблицу базы данных mySQL, которая включает:
- айпи адрес
- Счетчик кликов
- Временная метка Unix
Каждый пользователь/IP-адрес имеет право щелкнуть объявление 3 раза в течение 24 часов. Для обнаружения каждого клика по объявлению iFrame я использовал iframeTracker-jquery. class и реализовал следующий код 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 можно сделать спам.
Как я могу справиться с этими проблемами?
header('Location: ...');
). Кроме этого, вы почти ничего не можете сделать. 13.05.2015