[PHP] Jak zabezpieczyć formularz?
Aby zabezpieczyć swoją stronę przed atakami i niechcianymi danymi stosujemy walidację oraz sanitizację przesyłanych danych. Dodatkowo oprócz tego należy zabezpieczyć formularz przed atakami CSRF (Cross-Site Request Forgery). W tym celu dla każdego formularza należy wygenerować specjalny token przechowywany w sesji.
Zabezpieczenie przed CSRF
Ten przykład pokaże jak wdrożyć proste zabezpieczenie przed CSRF. Na początku stwórzmy przykładowy formularz:
<form action="send.php" method="POST">
<input type="text" name="name" required>
<input type="email" name="email" required>
<!-- Ukryte pole z tokenem CSRF -->
<input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token']; ?>">
<button type="submit">Wyślij</button>
</form>
W formularzu znalazło się dodatkowe (ukryte) pole zawierające nasz CSRF token.
Teraz skrypt obsługujący nasz formularz:
<?php
if($_SERVER['REQUEST_METHOD' ] == 'POST') {
if(isset($_POST['csrf_token']) && $_POST['csrf_token'] === $_SESSION['csrf_token']) {
// Resetujemy token po użyciu
unset($_SESSION['csrf_token']);
// Wszystko ok, można dalej przetwarzać dane
}
else {
// Nieprawidłowy CSRF token
}
}
else {
// Błędna REQUEST_METHOD
}
W skrypcie porównujemy przesłany CSRF token z tym zapisanym w sesji, jeśli się zgadzają wszystko ok. Ponadto w skrypcie sprawdzamy czy dane zostały przesłane odpowiednią metodą (w tym przypadku `POST`).
Komentarze
Prześlij komentarz
Dzięki za komentarz!