Skip to content

Commit 73d2f87

Browse files
[Turnstile] Q4 updates, feature table, ephemeral IDs (#18721)
* feature table * hostname management * typo * widget * faq entry * ephemeral ids draft * server side validation guidance * some edits * feedback edits * any hostname * remove aside * ephemeral id availability * edits * feedback again
1 parent 341b5b2 commit 73d2f87

File tree

10 files changed

+145
-44
lines changed

10 files changed

+145
-44
lines changed

public/_redirects

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,6 +1240,7 @@
12401240
/turnstile/migration/migrating-from-recaptcha/ /turnstile/migration/recaptcha/ 301
12411241
/turnstile/migration/migrating-from-hcaptcha/ /turnstile/migration/hcaptcha/ 301
12421242
/turnstile/concepts/widget-types/ /turnstile/concepts/widget/ 301
1243+
/turnstile/concepts/domain-management/ /turnstile/concepts/hostname-management/ 301
12431244

12441245
# waf
12451246
/waf/about/ /waf/concepts/ 301

src/content/docs/turnstile/concepts/domain-management.mdx

Lines changed: 0 additions & 31 deletions
This file was deleted.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
---
2+
title: Ephemeral IDs
3+
pcx_content_type: reference
4+
sidebar:
5+
order: 4
6+
7+
---
8+
9+
Ephemeral IDs generate a unique short-lived ID that can link behavior to a specific client instead of an IP address without relying on setting any cookies or using similar client-side storage.
10+
11+
When the same visitor interacts with Turnstile widgets from different Cloudflare customers, they receive different Ephemeral IDs for each contact. In attacks where fraudsters attempt to disguise themselves using different IP addresses, Ephemeral IDs detect abuse patterns more accurately than determining whether the visitor is a human or a bot.
12+
13+
Ephemeral IDs not unique and have a lifespan of up to a few days. They can be useful for identifying a bad actor in acute attacks such as sudden spikes in fake account creations or credential stuffing.
14+
15+
Refer to the [blog post](https://blog.cloudflare.com/turnstile-ephemeral-ids-for-fraud-detection/) for more information.
16+
17+
## Availability
18+
19+
Ephemeral IDs are available to Enterprise Bot Management customers with the Enterprise Turnstile add-on or standalone Enterprise Turnstile customers. Contact your account team for access to Ephemeral IDs.
20+
21+
## Enablement
22+
23+
After your account team enables the Ephemeral ID entitlement, you must turn it on for the widget that you want the Ephemeral ID on via the [API call](/api/resources/turnstile/subresources/widgets/methods/update/).
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
title: Hostname management
3+
pcx_content_type: reference
4+
sidebar:
5+
order: 2
6+
7+
---
8+
9+
By default, all widgets can have up to 10 hostnames associated with a widget. A widget requires at least one hostname to be entered.
10+
11+
Only Enterprise Bot Management and Enterprise Turnstile customers can have this limit increased. Contact your account team to increase your hostname limit.
12+
13+
You must specify a list of hostnames when creating a widget. The widget can only be used on these hostnames and will not work on any other hostnames. You can use subdomains to restrict the widgets further.
14+
15+
The hostname should not contain a scheme `http://` or `https://`, a port `443`, or a path `/`.
16+
17+
Specifying a subdomain is optional.
18+
19+
For example, using the `www.example.com` value will allow widgets on the following hostnames:
20+
21+
- `www.example.com`
22+
- `abc.www.example.com:8080`
23+
24+
but not on the following hostnames:
25+
26+
- `example.com`
27+
- `dash.example.com`
28+
- `cloudflare.com`
29+
30+
When the widget is embedded on a hostname not listed, it will show an error message.
31+
32+
## Optional hostname validation
33+
34+
Customers with Enterprise Bot Management or Enterprise Turnstile can have the optional `any hostname` validation entitlement.
35+
36+
By default, a widget requires at least one hostname to be entered. With this entitlement, you can create and use a widget without entering any hostnames for the widget. Contact your account team to enable this entitlement.

src/content/docs/turnstile/concepts/widget.mdx

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,49 +20,61 @@ Widgets can be implemented in normal, flexible, or compact sizes.
2020

2121
Refer to [widget sizes](/turnstile/get-started/client-side-rendering/#widget-size) for an example on how to configure flexible or compact mode.
2222

23-
## Managed (recommended)
23+
:::note[Offlabel]
24+
Customers with Enterprise Bot Management and Enterprise Turnstile have the ability to remove the Cloudflare branding and customize the Turnstile widget.
25+
:::
26+
27+
## Availability
28+
29+
Free users are limited to 10 widgets per account.
30+
31+
Customers with Enterprise Bot Management and Enterprise Turnstile can have this limit increased. Contact your account team to increase your widget limit.
32+
33+
## Widget types
34+
35+
### Managed (recommended)
2436

2537
This mode is fully managed by Cloudflare. It automatically chooses the appropriate action based on various signals and risk levels. Cloudflare will use the information from the visitor to decide if an interactive challenge should be used. Turnstile will only require interaction if a further check is necessary to verify that the visitor is human. When an interaction is required, the user will be prompted to check a box (no images or text to decipher). This managed mode is ideal for users who want a simple configuration without needing to fine-tune the behavior.
2638

27-
### Light mode
39+
#### Light mode
2840

2941
![Managed challenge](~/assets/images/turnstile/light-regular.png)
3042
![Verifying the challenge](~/assets/images/turnstile/light-verifying.png)
3143
![Successful managed challenge](~/assets/images/turnstile/light-success.png)
3244

33-
### Dark mode
45+
#### Dark mode
3446

3547
![Managed challenge](~/assets/images/turnstile/dark-regular.png)
3648
![Verifying the challenge](~/assets/images/turnstile/dark-verifying.png)
3749
![Successful managed challenge](~/assets/images/turnstile/dark-success.png)
3850

39-
## Compact mode
51+
### Compact mode
4052

4153
You can configure the Turnstile widget in compact mode, which functions in the same way as a Managed widget.
4254

43-
### Light mode
55+
#### Light mode
4456

4557
![Compact managed challenge](~/assets/images/turnstile/light-compact.png)
4658

47-
### Dark mode
59+
#### Dark mode
4860

4961
![Compact managed challenge](~/assets/images/turnstile/dark-compact.png)
5062

51-
## Non-Interactive
63+
### Non-Interactive
5264

5365
Visitors will see a widget with a loading bar while the browser challenges run. Unlike managed mode, visitors will never be required or prompted to interact with the widget. This mode is ideal for users who want to prioritize visitor experience and do not want to add any friction with a Turnstile interaction.
5466

55-
### Light mode
67+
#### Light mode
5668

5769
![Verifying the challenge](~/assets/images/turnstile/light-verifying.png)
5870
![Successful managed challenge](~/assets/images/turnstile/light-success.png)
5971

60-
### Dark mode
72+
#### Dark mode
6173

6274
![Verifying the challenge](~/assets/images/turnstile/dark-verifying.png)
6375
![Successful managed challenge](~/assets/images/turnstile/dark-success.png)
6476

65-
## Invisible
77+
### Invisible
6678

6779
This mode is similar to non-interactive mode where visitors will never interact with the Turnstile widget. Visitors will not see a widget or any indication that an invisible browser challenge is in progress. Invisible challenges should take a few seconds to complete.
6880

@@ -92,4 +104,4 @@ The widget expires when a token was issued but the user did not solve the challe
92104

93105
![Unsupported browser](~/assets/images/turnstile/unsupported-browser.png)
94106

95-
Visitors with outdated browsers or unsupported browsers will encouter this widget state. Refer to [Supported browsers](/waf/reference/cloudflare-challenges/#browser-support) for more information regarding supported browsers.
107+
Visitors with outdated browsers or unsupported browsers will encouter this widget state. Refer to [Supported browsers](/waf/reference/cloudflare-challenges/#browser-support) for more information regarding supported browsers.

src/content/docs/turnstile/frequently-asked-questions.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,23 @@ sidebar:
77

88
---
99

10+
## What features are available for Free or Enterprise users?
1011

12+
Refer to [Availability](/turnstile/#availability) for more information on features available per tier.
13+
14+
---
1115

1216
## What languages does Turnstile support?
1317

1418
Refer to the [list of supported languages](/turnstile/reference/supported-languages/) for more information.
1519

20+
---
1621

1722
## Does Turnstile conform to WCAG 2.1 Level AA accessibility standard?
1823

1924
Yes, Turnstile is WCAG 2.1 Level AA compliant.
2025

26+
---
2127

2228
## Where can I get additional support for Turnstile?
2329

src/content/docs/turnstile/get-started/server-side-validation.mdx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,10 @@ It always contains a `success` property, either true or false, indicating whethe
258258
"hostname": "example.com",
259259
"error-codes": [],
260260
"action": "login",
261-
"cdata": "sessionid-123456789"
261+
"cdata": "sessionid-123456789",
262+
"metadata":{
263+
"ephemeral_id": "x:9f78e0ed210960d7693b167e"
264+
}
262265
}
263266
```
264267

@@ -269,6 +272,7 @@ It always contains a `success` property, either true or false, indicating whethe
269272
- `action` is the customer widget identifier passed to the widget on the client side. This is used to differentiate widgets using the same sitekey in analytics. Its integrity is protected by modifications from an attacker. It is recommended to validate that the action matches an expected value.
270273
- `cdata` is the customer data passed to the widget on the client side. This can be used by the customer to convey state. It is integrity protected by modifications from an attacker.
271274
- `error-codes` is a list of errors that occurred.
275+
- (Enterprise only) `ephemeral_id` returns the [Ephemeral ID](/turnstile/concepts/ephemeral-id/) in siteverify.
272276

273277
In case of a validation failure, the response should be similar to the following:
274278

src/content/docs/turnstile/index.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ head:
1111
import {
1212
Description,
1313
Feature,
14+
FeatureTable,
1415
LinkButton,
1516
Plan,
1617
RelatedProduct,
@@ -53,6 +54,8 @@ Turnstile is WCAG 2.1 AA compliant.
5354

5455
## Availability
5556

57+
<FeatureTable id="security.turnstile" />
58+
5659
Refer to [Cloudflare Turnstile's product page](https://www.cloudflare.com/products/turnstile/) for more information on Turnstile's plans.
5760

5861
---

src/content/docs/turnstile/troubleshooting/testing.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import { GlossaryTooltip } from "~/components"
1212

1313
The following <GlossaryTooltip term="sitekey">sitekeys</GlossaryTooltip> and <GlossaryTooltip term="secret key">secret keys</GlossaryTooltip> are available for testing. It is recommended that you use these keys in your development environment to ensure the challenges running in Turnstile do not conflict with your developer tools.
1414

15-
To test locally with real keys, you need to add your testing hostnames (like `localhost`) to your [domain allowlist](/turnstile/concepts/domain-management/).
15+
To test locally with real keys, you need to add your testing hostnames (like `localhost`) to your [domain allowlist](/turnstile/concepts/hostname-management/).
1616

1717
Dummy sitekeys can be used from any domain, including on `localhost`.
1818

src/content/plans/index.json

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2010,6 +2010,53 @@
20102010
"ent": 200
20112011
}
20122012
}
2013+
},
2014+
"turnstile": {
2015+
"title": "Turnstile",
2016+
"link": "/turnstile/",
2017+
"properties": {
2018+
"widgets": {
2019+
"title": "Number of widgets",
2020+
"link": "/turnstile/concepts/widget/",
2021+
"free": "10 widgets",
2022+
"ent": "Unlimited"
2023+
},
2024+
"modes": {
2025+
"title": "Interactivity modes",
2026+
"link": "/turnstile/get-started/client-side-rendering/#appearance-modes",
2027+
"free": "Managed, Invisible, Interactive",
2028+
"ent": "Managed, Invisible, Interactive"
2029+
},
2030+
"offlabel": {
2031+
"title": "Offlabel (remove Cloudflare branding)",
2032+
"free": "No",
2033+
"ent": "Yes"
2034+
},
2035+
"preclearance": {
2036+
"title": "Pre-clearance support",
2037+
"link": "/turnstile/concepts/pre-clearance-support/",
2038+
"free": "Yes",
2039+
"ent": "Yes"
2040+
},
2041+
"hostname_validation": {
2042+
"title": "Hostname validation",
2043+
"link": "/turnstile/concepts/hostname-management/",
2044+
"free": "10 hostnames per widget",
2045+
"ent": "Maximum of 200 hostnames per widget. <br> The `any hostname` entitlement removes hostname as a requirement and allows you to use the widget anywhere."
2046+
},
2047+
"graphql_analytics": {
2048+
"title": "Analytics time window",
2049+
"link": "/turnstile/turnstile-analytics/",
2050+
"free": "30 days maximum",
2051+
"ent": "30 days maximum"
2052+
},
2053+
"ephemeral_ids": {
2054+
"title": "Ephemeral IDs",
2055+
"link": "/turnstile/concepts/ephemeral-id/",
2056+
"free": "No",
2057+
"ent": "Yes"
2058+
}
2059+
}
20132060
}
20142061
},
20152062
"scrape_shield": {

0 commit comments

Comments
 (0)