setvar

Description: Set variable

Syntax: setvar:collection.key=value

The setvar action creates, modifies, or deletes collection variables. This is a core action for implementing anomaly scoring, state tracking, and passing data between rules. It supports multiple operations:

  • setvar:tx.key=value - Set variable to specified value
  • setvar:tx.key=+value - Increment variable by specified value (numeric addition)
  • setvar:tx.key=-value - Decrement variable by specified value
  • setvar:!tx.key - Delete variable

Multiple setvar actions can be used in a single rule. Supports macro expansion using %{VARIABLE} to reference other variable values.

Example:

# Initialize anomaly score
SecAction "id:1,phase:1,pass,nolog,setvar:tx.anomaly_score=0"

# Increment score when attack detected
SecRule ARGS "@detectSQLi" \
    "id:2,phase:2,pass,setvar:tx.anomaly_score=+5,msg:'SQL Injection +5'"

# Set flag variable
SecRule REQUEST_URI "@beginsWith /api" \
    "id:3,phase:1,pass,nolog,setvar:tx.is_api=1"

# Set variable using macro expansion
SecRule REQUEST_HEADERS:User-Agent "@rx (bot|spider)" \
    "id:4,phase:1,pass,setvar:tx.client_type=%{MATCHED_VAR}"

# Delete variable
SecRule TX:temporary "@eq 1" \
    "id:5,phase:5,pass,nolog,setvar:!tx.temporary"

Parameter Type: string

Case Sensitive: Yes