Чую сделал какой то быдлокод, потому что не уверен в том что делаю и полагаю что есть способы лучше.
На странице есть скрытое поле «random-page-id», в нём размещается случайно сгенерированное число из «печенек». Если передаваемое формой число не совпадает с числом в печеньках, то настройки не обновляются. Если совпадает - то обновляются. Зачем это нужно? Что бы нельзя было обнулить или подменить настройки, подбросив ссылку.
<?php
// Считывание настроек
if (isset($_COOKIE["random-page-id"])) {
$RandomPageId = $_COOKIE["random-page-id"] ; // Если случайный идентификатор есть, он считывается.
// Нужно это для безопасности. Что бы переход по случайной ссылке не переписал настройки.
} else {
$RandomPageId = random_int(0, 2000000000);
setcookie("random-page-id", $RandomPageId, time() + 615168000); // Случайный идентификатор сгенерирован и записан в печеньки
}
if (isset($_COOKIE["rules"])) {
$rules=$_COOKIE["rules"] ;
}
if (isset($_COOKIE["cookie-script"])) {
$CookieScript=$_COOKIE["cookie-script"] ;
}
// Сохранение настроек
if (isset($_POST["random-page-id"])) {
// Если была отправлена форма
if ($_POST["random-page-id"] == $_COOKIE["random-page-id"]) {
// Параметр отправили верный
// Запись обновлённых настроек
$rules = $_POST["rules"];
setcookie ("rules", $rules, time() + 615168000 ); // Запись выбора набора правил. Серверные или анонимные.
$CookieScript = $_POST["cookie-script"];
setcookie ("cookie-script", rtrim(htmlspecialchars($CookieScript)), time() + 615168000 ); // Запись анонимных правил.
} else {
// Попытка взлома
$ErrorNah = True;
}
$RandomPageId = $_COOKIE["random-page-id"] ; // Если случайный идентификатор есть, он считывается.
// Нужно это для безопасности. Что бы переход по случайной ссылке не переписал настройки.
} else {
// Страница открыта без запроса.
}
?>
Форма:
<form action="/settings.php" accept-charset="UTF-8" method="post">
<p></p>Какие правила применять?</p>
<p>
<?php echo $rules ; ?> <br>
<input type="radio" name="rules" value="anon" <?php if ($rules=="anon") {echo "checked";} ; ?> >Анонимные<Br>
<input type="radio" name="rules" value="server" <?php if ($rules=="server") {echo "checked";} ; ?> >Серверные<Br>
</p>
<HR>
<input type="text" name="random-page-id" value=" <?php echo $RandomPageId ; ?>" > <?php echo $RandomPageId ; ?>
<HR> <?php if ($ErrorNah) {echo "<p> <H2> Обнаружена попытка взлома </H2> <HR> </p>";} ; ?>
<p><textarea name="cookie-script" class="TextRules"><?php echo rtrim($CookieScript);?></textarea></p>
<p> Сохранение сценария <input type="submit" /></p>
<HR>
</form>
Как это сделать лучше?