Skip to content
Back to skills

072 Configuration 2090120e

ASecurity

**Best for**: Quick tests, single snippets, visual rule building

  • 9 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 11, 2026
developmentjavascripttypescriptpythongojavabashnodeexpressterraformapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned October 11, 2026

npx -y skills add tools-only/X-Skills --skill 072-configuration_2090120e --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 072 Configuration 2090120e?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 072 Configuration 2090120e
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/tools-only-072-configuration-2090120e/badge)](https://www.skillsdirectory.com/skills/tools-only-072-configuration-2090120e)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

SKILL.md
# Snippets Configuration Guide

## Configuration Methods

### 1. Dashboard (GUI)

**Best for**: Quick tests, single snippets, visual rule building

```
1. Go to zone → Rules → Snippets
2. Click "Create Snippet" or select template
3. Enter snippet name (a-z, 0-9, _ only, cannot change later)
4. Write JavaScript code (32KB max)
5. Configure snippet rule:
   - Expression Builder (visual) or Expression Editor (text)
   - Use Ruleset Engine filter expressions
6. Test with Preview/HTTP tabs
7. Deploy or Save as Draft
```

### 2. REST API

**Best for**: CI/CD, automation, programmatic management

```bash
# Create/update snippet
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
  --request PUT \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --form "files=@example.js" \
  --form "metadata={\"main_module\": \"example.js\"}"

# Create snippet rule
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/snippet_rules" \
  --request PUT \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
  --header "Content-Type: application/json" \
  --data '{
    "rules": [
      {
        "description": "Trigger snippet on /api paths",
        "enabled": true,
        "expression": "starts_with(http.request.uri.path, \"/api/\")",
        "snippet_name": "api_snippet"
      }
    ]
  }'

# List snippets
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets" \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"

# Delete snippet
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/snippets/$SNIPPET_NAME" \
  --request DELETE \
  --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"
```

### 3. Terraform

**Best for**: Infrastructure-as-code, multi-zone deployments

```hcl
# Configure Terraform provider
terraform {
  required_providers {
    cloudflare = {
      source  = "cloudflare/cloudflare"
      version = "~> 4.0"
    }
  }
}

provider "cloudflare" {
  api_token = var.cloudflare_api_token
}

# Create snippet
resource "cloudflare_snippet" "security_headers" {
  zone_id = var.zone_id
  name    = "security_headers"

  main_module = "security_headers.js"
  files {
    name    = "security_headers.js"
    content = file("${path.module}/snippets/security_headers.js")
  }
}

# Create snippet rule
resource "cloudflare_snippet_rules" "security_rules" {
  zone_id = var.zone_id

  rules {
    description  = "Apply security headers to all requests"
    enabled      = true
    expression   = "true"
    snippet_name = cloudflare_snippet.security_headers.name
  }
}
```

### 4. Pulumi

**Best for**: Multi-cloud IaC, TypeScript/Python/Go workflows

```typescript
import * as cloudflare from '@pulumi/cloudflare'
import * as fs from 'fs'

// Create snippet
const securitySnippet = new cloudflare.Snippet('security-headers', {
  zoneId: zoneId,
  name: 'security_headers',
  mainModule: 'security_headers.js',
  files: [
    {
      name: 'security_headers.js',
      content: fs.readFileSync('./snippets/security_headers.js', 'utf8'),
    },
  ],
})

// Create snippet rule
const snippetRule = new cloudflare.SnippetRules('security-rules', {
  zoneId: zoneId,
  rules: [
    {
      description: 'Apply security headers',
      enabled: true,
      expression: 'true',
      snippetName: securitySnippet.name,
    },
  ],
})
```

## Filter Expressions

Snippets use Cloudflare's Ruleset Engine expression language to determine when to execute.

### Common Expression Patterns

```javascript
// Host matching
http.host eq "example.com"
http.host in {"example.com" "www.example.com"}
http.host contains "example"

// Path matching
http.request.uri.path eq "/api/users"
starts_with(http.request.uri.path, "/api/")
ends_with(http.request.uri.path, ".json")
matches(http.request.uri.path, "^/api/v[0-9]+/")

// Query parameters
http.request.uri.query contains "debug=true"

// Headers
http.headers["user-agent"] contains "Mobile"
http.headers["accept-language"] eq "en-US"

// Cookies
http.cookie contains "session="

// Geolocation
ip.geoip.country eq "US"
ip.geoip.continent eq "EU"

// Bot detection (requires Bot Management)
cf.bot_management.score lt 30

// Method
http.request.method eq "POST"
http.request.method in {"POST" "PUT" "PATCH"}

// Combine with logical operators
http.host eq "example.com" and starts_with(http.request.uri.path, "/api/")
ip.geoip.country eq "US" or ip.geoip.country eq "CA"
not http.headers["user-agent"] contains "bot"
```

### Expression Functions

| Function        | Example                                          | Description          |
| --------------- | ------------------------------------------------ | -------------------- |
| `starts_with()` | `starts_with(http.request.uri.path, "/api/")`    | Check prefix         |
| `ends_with()`   | `ends_with(http.request.uri.path, ".json")`      | Check suffix         |
| `contains()`    | `contains(http.headers["user-agent"], "Mobile")` | Check substring      |
| `matches()`     | `matches(http.request.uri.path, "^/api/")`       | Regex match          |
| `lower()`       | `lower(http.host) eq "example.com"`              | Convert to lowercase |
| `upper()`       | `upper(http.headers["x-api-key"])`               | Convert to uppercase |
| `len()`         | `len(http.request.uri.path) gt 100`              | String length        |

## Deployment Workflow

### Development

1. Write snippet code locally
2. Test syntax with `node snippet.js` or TypeScript compiler
3. Deploy to Dashboard or use API with `Save as Draft`
4. Test with Preview/HTTP tabs in Dashboard
5. Enable rule when ready

### Production

1. Store snippet code in version control
2. Use Terraform/Pulumi for reproducible deployments
3. Deploy to staging zone first
4. Test with real traffic (use low-traffic subdomain)
5. Apply to production zone
6. Monitor with Analytics/Logpush

## Limits & Requirements

| Resource          | Limit      | Notes                                |
| ----------------- | ---------- | ------------------------------------ |
| Snippet size      | 32 KB      | Per snippet, compressed              |
| Snippet name      | 64 chars   | `a-z`, `0-9`, `_` only, immutable    |
| Snippets per zone | 20         | Soft limit, contact support for more |
| Rules per zone    | 20         | One rule per snippet typical         |
| Expression length | 4096 chars | Per rule expression                  |

## Authentication

### API Token (Recommended)

```bash
# Create token at: https://dash.cloudflare.com/profile/api-tokens
# Required permissions: Zone.Snippets:Edit, Zone.Rules:Edit
export CLOUDFLARE_API_TOKEN="your_token_here"
```

### API Key (Legacy)

```bash
export CLOUDFLARE_EMAIL="your@email.com"
export CLOUDFLARE_API_KEY="your_global_api_key"
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.