← Cloudflare Turnstile / turnstile / tutorials
Ochrana formulářů
Tento návod vás provede integrací Cloudflare Turnstile pro ochranu webových formulářů, například přihlašovacích, registračních nebo kontaktních. Naučíte se vložit widget Turnstile na straně klienta a ověřit token Turnstile přes Siteverify API na straně serveru.
Než začnete
- Potřebujete účet Cloudflare.
- Potřebujete webovou aplikaci s formulářem, který chcete chránit.
- Potřebujete základní znalost HTML a zvoleného serverového jazyka, například Node.js nebo Python.
Získání sitekey a secret key pro Turnstile
- V řídicím panelu Cloudflare přejděte na Turnstile . Přejděte na Turnstile ↗
- Vytvoření nového widgetu Turnstile.
- Zkopírujte si sitekey a secret key, budete je potřebovat v dalším kroku.
Přidejte widget Turnstile do svého HTML formuláře
- Přidejte widget Turnstile do svého formuláře.
- Nahraďte
<YOUR-SITE-KEY>hodnotou sitekey z Cloudflare. - Přidejte
data-callbackatribut k divu widgetu Turnstile. Tato JavaScriptová funkce se zavolá po úspěšném ověření. - Tlačítko pro odeslání musí být na začátku neaktivní.
Příklad
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Contact Form</title>
<script
src="https://challenges.cloudflare.com/turnstile/v0/api.js"
async
defer
></script>
<script>
function enableSubmit() {
document.getElementById("submit-button").disabled = false;
}
</script>
</head>
<body>
<form id="contact-form" action="/submit" method="POST">
<input type="text" name="name" placeholder="Name" required />
<input type="email" name="email" placeholder="Email" required />
<textarea name="message" placeholder="Message" required></textarea>
<!-- Turnstile widget -->
<div
class="cf-turnstile"
data-sitekey="<YOUR-SITE-KEY>"
data-callback="enableSubmit"
></div>
<button type="submit" id="submit-button" disabled>Submit</button>
</form>
</body>
</html>Ověření tokenu Turnstile na straně serveru
Token Turnstile odeslaný ze strany klienta je potřeba ověřit. Níže je příklad v Node.js.
Příklad v Node.js
const express = require("express");
const axios = require("axios");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.post("/submit", async (req, res) => {
const turnstileToken = req.body["cf-turnstile-response"];
const secretKey = "your-secret-key";
try {
const response = await axios.post(
"https://challenges.cloudflare.com/turnstile/v0/siteverify",
null,
{
params: {
secret: secretKey,
response: turnstileToken,
},
},
);
if (response.data.success) {
// Token is valid, proceed with form submission
const name = req.body.name;
const email = req.body.email;
const message = req.body.message;
// Your form processing logic here
res.send("Form submission successful");
} else {
res.status(400).send("Turnstile verification failed");
}
} catch (error) {
res.status(500).send("Error verifying Turnstile token");
}
});
app.listen(3000, () => {
console.log("Server is running on port 3000");
});Na co si dát pozor
Ověření tokenu Turnstile je nutné zpracovat správně. Tato část shrnuje klíčové body, na které je třeba myslet.
Ověření tokenu po vyplnění formuláře
- Token Turnstile ověřte až poté, co uživatel vyplní formulář a klikne na submit.
- Pokud token ověříte dřív, než uživatel vyplní své údaje, může útočník ochranu obejít: získá platný token a teprve potom upraví odesílaný formulář.
Správně implementovaný postup
- Když uživatel odešle formulář, pošlete na svůj server data formuláře i token Turnstile.
- Na straně serveru nejprve ověřte token Turnstile.
- Podle odpovědi z ověření se rozhodněte, zda budete data z formuláře dál zpracovávat.