#php #html #forms #security #content-security-policy
#php #HTML #формы #Безопасность #content-security-policy
Вопрос:
Я создал HTML-форму с заголовком php csp. Я хочу сделать безопасную проверку с помощью php. Мой заголовок csp выглядит так: Content-Security-Policy:default-src 'none'; base-uri 'self'; form-action 'none' https:example.com;
. В моей форме также есть сгенерированный php токен CSRF.
Теперь моя проблема: у меня index.php файл с формой и генератором токенов, а validation.php файл и thankyou.php файл с конечным экраном. Я хочу, чтобы validation.php файл не отображается в URL-адресе при перенаправлении на thankyou.php досье.
index.php
<!---- HERE IS MY PHP CODE ---->
header('X-XSS-Protection: 1; mode=block');
header('X-Frame-Options: deny');
header('X-Content-Type-Options: nosniff');
header('Referrer-Policy: same-origin');
/* CSRF Protection */
$_SESSION['token'] = bin2hex(random_bytes(24));
<!---- ******************* ---->
<form id="delivery-form" action="php/validation.php"> <!---- HERE I'M NOT SURE HOW TO HIDE ---->
<div id="delivery-address" class="site">
<h2>Delivery Address/h2>
<!---Radio Buttons---->
<label for="men" class="radio men">
<input type="radio" name="rdo" id="men" class="hidden"/>
<span class="label"></span>Herr
</label>
<label for="woman" class="radio">
<input type="radio" name="rdo" id="woman" class="hidden"/>
<span class="label"></span>Frau
</label><br><br>
<div class="inputBox">
<input type="text" placeholder=" " name="firstname" autocomplete="on" required value="">
<label>Firstname</label>
</div><br>
<div class="inputBox">
<input type="text" placeholder=" " name="lastname" class="big_break" autocomplete="on" required value="">
<label>Lastname</label>
</div><br>
<div class="inputBox">
<input type="text" placeholder=" " name="street" id="input_middle_size" autocomplete="on" required value="">
<label>Street</label>
</div>
<div class="inputBox">
<input type="text" placeholder=" " name="number" id="input_small_size" autocomplete="on" required value="">
<label>Number</label>
</div><br>
<div class="inputBox">
<input type="text" placeholder=" " name="plz" id="input_small_size" autocomplete="on" required value="">
<label>Place</label>
</div>
<div class="inputBox">
<input type="text" placeholder=" " name="town" class="big_break" id="input_middle_size" autocomplete="on" required value="">
<label>town</label>
</div><br>
<div class="inputBox">
<input type="email" placeholder=" " name="email" autocomplete="on" required value="">
<label>E-Mail</label>
</div><br>
<!---Vorwahl und Telefonnummer Feld---->
<div class="inputBox">
<input type="text" placeholder=" " name="vorwahl" id="input_small_size" autocomplete="on" required value="">
<label>area-code</label>
</div>
<div class="inputBox">
<input type="tel" placeholder=" " name="phone_number" class="big_break" id="input_middle_size" autocomplete="on" required value="">
<label>phone-number</label>
</div><br>
</div>
</form>
Потому что хакер может затем атаковать мой validation.php досье. Я прочитал статью через Post / Redirect / Get.
Но у меня нет idee, как я могу перенаправить безопасно.
Я надеюсь, что кто-нибудь может сказать мне, как я могу перенаправить с моей формы на validation.php и thankyou.php файл (в основном безопасный для хакеров).
Ответ №1:
В любом случае вам нужно отправить форму куда-нибудь на сервер, и вы не можете скрыть этот PHP-модуль с помощью перенаправлений (они легко отслеживаются в заголовках HTTP, поэтому это защита только от хакеров-детей).
Вы уже используете токены CSRF и CSP form-action
для обеспечения безопасности. Это хорошо.
Чтобы усложнить хакерские атаки, вы можете дополнительно использовать службу CAPTCHA (например, reCAPTHA, hCAPTCHA), но эти сторонние скрипты также должны быть разрешены в CSP (поскольку вы его используете).
Но невозможно скрыть обработчик формы (validation.php в вашем случае).
Возможно только создать validation.php обработчик без уязвимостей и не оставляет хакерам никаких шансов.