私が言ったように、これはボットによるスパムを防止する 1 つの方法です。ほとんどのボットを停止します。これを実装した後、ボットで問題が発生することはありませんでした
MySQL
CREATE TABLE IF NOT EXISTS `key_validation` (
`key` varchar(64) NOT NULL,
`date` varchar(32) NOT NULL,
UNIQUE KEY `key` (`key`),
KEY `date` (`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
PHP REST Web サービス (getKey.php)
<?php
//file that creates a connection to the database
require "db_connect.php";
if($_GET['mode'] == "get_key") {
$key = md5(microtime().rand());
mysql_query("INSERT INTO key_validation (`key`,`date`) VALUES ('$key','".time()."')");
echo json_encode($key);
exit();
}
?>
JavaScript
function insertKeyIntoForm(form) {
$.getJSON('getKey.php?mode=get_key', function(data) {
$('<input>').attr({
type: 'hidden',
id: 'verify_key',
name: 'verify_key',
value: data
}).appendTo(form);
});
}
insertKeyIntoForm('#myFormId');
登録を処理する PHP ファイル
//TODO
//permanently block ip addresses that requests this service more than x number of times a minute
function func_query_first_cell($query) {
if ($p_result = mysql_query($query)) {
$result = mysql_fetch_row($p_result);
}
return $result[0];
}
//to make sure is no spammer
if(func_query_first_cell("SELECT `key` FROM key_validation WHERE `key`='$verify_key'") == "")
exit();
else
db_query("DELETE FROM key_validation WHERE `key`='$verify_key'");