Plain HTML form
Protect a classic HTML form that posts to your server, with a data attribute or a small submit handler.
On this page
With a data attribute #
The shortest integration: configure the script on its tag and mark the form.
<script src="https://blockalt.click/v1/assets/blockalt.c8b2d9539dbbc932999adb0f51a36bddd4e99899f543e1505818841878cf9813.js"
integrity="sha384-pblByFDqcJxRfhDh18GH3gRsWy9ZaS4AjDc6OpozzQqvkuYvyin+4BWcKXxA+bN8" crossorigin="anonymous"
data-site-key="ba_pk_your_public_site_key"
data-api-url="https://blockalt.click"
data-config-public-keys="MCowBQYDK2VwAyEAXmYdcBh/jf+z+0H+hs2QvZ9UG4PBgkRvHX/JuXyjIL8= MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE34qdEtOeD21+CmmfTmFyRr/vySsY1TD6BJZFtwF37pkelvN2vRYWWHdLrUouzkQXEfnA7V50xK2QcmnBCGsxbA== MCowBQYDK2VwAyEAtkfghYcdvSRf2wA01gjQtgTqdYGjaDUZsOPXzgLnnT0= MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYYmQNAMnVKK7G3VVguAk3SC/RFT5SDjCoxcFMOPFx0vmsGycJWOK8hCdxuTCHlvShng1fo0y4Q9PJHPIGQ9EfA=="></script>
<form method="post" action="/contact" data-blockalt-action="contact">
<textarea name="message" required></textarea>
<button>Send</button>
</form>On submit the script adds the token as blockalt-token and sends the form. See forms.
With a submit handler #
Add the script, a hidden blockalt-token field and a submit handler in a static file (no inline script needed):
<script src="https://blockalt.click/v1/assets/blockalt.c8b2d9539dbbc932999adb0f51a36bddd4e99899f543e1505818841878cf9813.js"
integrity="sha384-pblByFDqcJxRfhDh18GH3gRsWy9ZaS4AjDc6OpozzQqvkuYvyin+4BWcKXxA+bN8"
crossorigin="anonymous"></script>
<script src="/js/signup.js" defer></script>
<form id="signup" method="post" action="/signup">
<input name="email" type="email" required>
<input name="blockalt-token" type="hidden">
<button>Create account</button>
<p class="error" role="alert"></p>
</form>const protection = BlockAlt.create({
siteKey: "ba_pk_your_public_site_key",
apiUrl: "https://blockalt.click",
// Every key of GET /v1/keys (configPublicKeys), standby keys included.
configPublicKeys: ["MCowBQYDK2VwAyEAXmYdcBh/jf+z+0H+hs2QvZ9UG4PBgkRvHX/JuXyjIL8=","MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE34qdEtOeD21+CmmfTmFyRr/vySsY1TD6BJZFtwF37pkelvN2vRYWWHdLrUouzkQXEfnA7V50xK2QcmnBCGsxbA==","MCowBQYDK2VwAyEAtkfghYcdvSRf2wA01gjQtgTqdYGjaDUZsOPXzgLnnT0=","MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEYYmQNAMnVKK7G3VVguAk3SC/RFT5SDjCoxcFMOPFx0vmsGycJWOK8hCdxuTCHlvShng1fo0y4Q9PJHPIGQ9EfA=="],
});
const form = document.querySelector("#signup");
form.addEventListener("submit", async (event) => {
event.preventDefault();
try {
// A fresh token for every attempt: single use, valid for 120 seconds.
form.elements["blockalt-token"].value = await protection.execute("signup");
form.submit();
} catch {
form.querySelector(".error").textContent = "Please try again.";
}
});On the server #
Read blockalt-token from the posted fields and verify it before doing anything, with any of the server snippets. Show a neutral message on refusal ("Please try again") and log the reason and id for yourself.
Something unclear or missing on this page? Write to support@blockalt.click.