Не совсем верно. Локальные переменные должны быть инициализированы только в качестве ссылки. Локальная переменная может быть оставлена неинициализированной, если ее не ссылать. Например:
int x; // Valid
int y;
println("y=" + y); // Not valid since y's value has never been assigned
Чтобы предотвратить CSRF, вам нужно проверить одноразовый токен, POST'ed и связанный с текущим сеансом. Примерно так. . .
На странице, где пользователь запрашивает удаление записи:
confirm.php
<?php
session_start();
$token = isset($_SESSION['delete_customer_token']) ? $_SESSION['delete_customer_token'] : "";
if (!$token) {
// generate token and persist for later verification
// - in practice use openssl_random_pseudo_bytes() or similar instead of uniqid()
$token = md5(uniqid());
$_SESSION['delete_customer_token']= $token;
}
session_write_close();
?>
<html>
<body>
<form method="post" action="confirm_save.php">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Do you really want to delete?
<input type="submit" value=" Yes " />
<input type="button" value=" No " onclick="history.go(-1);" />
</form>
</body>
</html>
Затем, когда дело доходит до фактического удаления записи:
confirm_save.php
<?php
session_start();
// validate token
$token = isset($_SESSION['delete_customer_token']) ? $_SESSION['delete_customer_token'] : "";
if ($token && $_POST['token'] === $token) {
// delete the record
...
// remove token after successful delete
unset($_SESSION['delete_customer_token']);
} else {
// log potential CSRF attack.
}
session_write_close();
?>
Токен должен быть трудным для предположение, уникально для каждого запроса на удаление, принимается только через $ _POST и истекает через несколько минут (срок действия не показан в этом примере).
При проверке рефералов все, что вы делаете, сводится к тому, чтобы убедиться, что реферер находится с вашего сайта / системы. Если референт не существует или находится с иностранного сайта, тогда проверка реферала завершится ошибкой, и вы можете не захотеть выполнять любой запрос.
В прошлом проблемы с различными технологиями и браузерами (flash..et al) допускались. подделка реферальных заголовков. Это нужно учитывать. Существует несколько методов, использующих javascript для ссылки на ресурсы, где реферальные данные отсутствуют / передаются в заголовке запроса.
Это поведение несколько различается в зависимости от браузера. Если вы используете javascript для отправки формы, вы обычно в порядке. Если вы используете что-то вроде window.location, скорее всего, вам не следует ожидать наличия реферальных данных.