Это то, что я делаю,
- На вашем сайте создайте секретную строку. Я использую HMAC ($ _ SERVER ['REMOTE_ADDR'], ключ).
- Напишите секрет в вар. JavaScript.
- При вызове AJAX передайте эту строку в качестве параметра.
- На сервере AJAX снова выполните хеширование. Если он соответствует параметру, вызов поступает с вашей страницы.
РЕДАКТИРОВАТЬ: примеры кода,
На вашем сайте вы делаете это,
$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = rand();
$timestamp = time();
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);
Распечатайте переменные на страницу,
<script type="text/javascript">
<?php
echo " var signature = '" . $signature . "';\n";
echo " var nonce = '" . $nonce . "';\n";
echo " var timestamp = '" . $timestamp . "';\n";
?>
</script>
Когда вы делаете вызов AJAX, передайте 3 параметра на сервер,
http://example.com?signature=...&nonce=...×tamp=...
На сервере AJAX повторите вычисления,
$key = 'supersecretkey'; // This is your security, don't expose this
$nonce = $_REQUEST['nonce'];
$timestamp = $_REQUEST['timestamp'];
$signature = hash_hmac('sha1', $_SERVER['REMOTE_ADDR'] . $nonce . $timestamp, $key);
if ($signature == $_REQUEST['signature'])
// the call if from my page.
Вы также можете выбрать отметку времени для валюты и nonce для воспроизведения (необходим сеанс или хранилище данных).