1. Použitie CAPTCHA
CAPTCHA je overovací mechanizmus, ktorý pomáha odlíšiť človeka od automatizovaného skriptu. V tomto návode využijeme Google reCAPTCHA v2, ktorá je ľahko implementovateľná a poskytuje vysokú úroveň ochrany.
HTML formulár s reCAPTCHA
Nasledujúci príklad ukazuje, ako vložiť reCAPTCHA do formulára. Nahraďte VÁŠ_SITE_KEY
Vašim kľúčom získaným z administrácie Google reCAPTCHA.
<form action="process_form.php" method="post">
<!-- Pridajte ďalšie potrebné polia formulára -->
<div class="g-recaptcha" data-sitekey="VÁŠ_SITE_KEY"></div>
<input type="submit" value="Odoslať">
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
Overenie reCAPTCHA na strane servera (PHP)
Serverová kontrola overuje, či reCAPTCHA bola úspešne vyplnená. Nahraďte VÁŠ_SECRET_KEY
Vaším tajným kľúčom.
<?php
$recaptcha_secret = 'VÁŠ_SECRET_KEY';
$response = $_POST['g-recaptcha-response'];
$remoteip = $_SERVER['REMOTE_ADDR'];
// Overenie pomocou volania API Google
$verify = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret={$recaptcha_secret}&response={$response}&remoteip={$remoteip}");
$captcha_success = json_decode($verify);
if ($captcha_success->success == false) {
die('Captcha nebola úspešne overená.');
} else {
// Ak je overenie úspešné, pokračujte so spracovaním formulára
}
?>
2. Honeypot technika
Honeypot technika spočíva v pridaní skrytého poľa do formulára. Normálny používateľ ho neuvidí, zatiaľ čo spamové roboty ho môžu vyplniť. Ak je pole naplnené, systém to vyhodnotí ako pokus o spam.
HTML formulár s honeypot poľom
Skryté pole sa zobrazí pomocou CSS štýlu display:none;
. Dôležité je, aby meno poľa bolo atraktívne pre boty, napríklad email_confirm
.
<form action="process_form.php" method="post">
<input type="text" name="meno" placeholder="Vaše meno" required>
<!-- Honeypot pole: toto pole by nemalo byť vyplnené -->
<div style="display:none;">
<input type="text" name="email_confirm" placeholder="Nevyplňujte toto pole">
</div>
<input type="submit" value="Odoslať">
</form>
Kontrola honeypot poľa (PHP)
Kontrola spočíva v overení, či skryté pole nie je naplnené. Ak áno, formulár je považovaný za spamový.
<?php
if (!empty($_POST['email_confirm'])) {
die('Detekovaný spam.');
}
// Pokračujte so spracovaním formulára, ak je pole prázdne
?>
3. Validácia vstupu
Validácia vstupu je základným krokom pri zabezpečení formulárov. Správna validácia na strane servera pomáha chrániť aplikáciu pred škodlivými vstupmi a útokmi, ako sú SQL injekcie a XSS útoky.
Príklad validácie vstupu (PHP)
Príklad demonštruje základnú validáciu, kde sa orezávajú medzery a kontroluje sa dĺžka vstupu. Je možné pridať aj ďalšie pravidlá podľa potrieb.
<?php
$meno = trim($_POST['meno']);
if (empty($meno) || strlen($meno) < 2) {
die('Neplatné meno. Zadajte aspoň 2 znaky.');
}
// Pokračujte so spracovaním formulára, napríklad ukladanie do databázy
?>
4. Ochrana pred CSRF útokmi
CSRF (Cross-Site Request Forgery) útoky využívajú autentifikačné údaje používateľa. Na ich zmiernenie je bežné používať CSRF tokeny, ktoré sú unikátne pre každú session a formulár.
Generovanie CSRF tokenu a vloženie do formulára
Pri prvom načítaní formulára sa generuje CSRF token, ktorý sa uloží do session a následne vloží do formulára ako skryté pole.
<?php
session_start();
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
?>
<form action="process_form.php" method="post">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<!-- Ďalšie polia formulára -->
<input type="submit" value="Odoslať">
</form>
Overenie CSRF tokenu (PHP)
Pri spracovaní formulára sa porovná token z formulára so tokenom uloženým v session. Ak sa nezhodujú, formulár je odmietnutý.
<?php
session_start();
if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
die('Neplatný CSRF token.');
}
// Pokračujte so spracovaním formulára
?>
5. Obmedzenie počtu odoslaní formulára
Obmedzenie frekvencie odosielania formulára môže zabrániť masovým útokom alebo spamovaniu. Tento prístup využíva session alebo sledovanie IP adresy a nastavuje minimálny čas medzi odosleniami.
Jednoduché obmedzenie pomocou session (PHP)
Príklad kontroluje, či uplynulo aspoň 10 sekúnd od posledného odoslania formulára. Hodnotu je možné upraviť podľa potreby.
<?php
session_start();
if (!isset($_SESSION['last_submission'])) {
$_SESSION['last_submission'] = time();
} else {
if (time() - $_SESSION['last_submission'] < 10) {
die('Príliš časté odosielanie formulára. Skúste to neskôr.');
}
}
$_SESSION['last_submission'] = time();
// Pokračujte so spracovaním formulára
?>
6. Použitie blacklistu
Blacklist (čierna listina) umožňuje zablokovať prístup používateľov alebo domén, ktoré sú známe svojou škodlivou aktivitou. V nasledujúcich príkladoch sú demonštrované dva spôsoby: blokovanie podľa IP adresy a blokovanie emailových domén.
Príklad blacklistu pre IP adresy (PHP)
Tento kód porovnáva aktuálnu IP adresu s definovaným zoznamom blokovaných IP adries. Ak sa adresa nachádza v zozname, prístup je odmietnutý.
<?php
// Definovanie čiernej listiny s blokovanými IP adresami
$ip_blacklist = [
'192.168.1.100',
'203.0.113.50'
];
$user_ip = $_SERVER['REMOTE_ADDR'];
if (in_array($user_ip, $ip_blacklist)) {
die('Prístup odmietnutý z dôvodu blokovanej IP adresy.');
}
?>
Príklad blacklistu pre emailové domény (PHP)
Pri registrácii alebo odosielaní formulára môžete overiť emailovú adresu a blokovať prístupy z určitých domén.
<?php
// Definovanie čiernej listiny pre emailové domény
$blacklist_domains = ['spam.com', 'fake.com'];
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$domain = substr(strrchr($email, "@"), 1);
if (in_array($domain, $blacklist_domains)) {
die('Registrácia z tejto domény nie je povolená.');
}
?>
Záver
Implementáciou popísaných techník – použitia CAPTCHA, honeypot metódy, dôkladnej validácie vstupov, ochrany pred CSRF útokmi, obmedzenia počtu odoslaní formulára a využitia blacklistu – výrazne zvýšite bezpečnosť Vašich webových formulárov. Každá z týchto metód poskytuje ďalšiu vrstvu ochrany a v kombinácii ponúkajú komplexné zabezpečenie proti spamovým a škodlivým aktivitám.
Odporúča sa testovať každú implementáciu a prispôsobiť ju konkrétnym potrebám a rizikám Vašej aplikácie.