Ensure string schema with broad pattern
Ensure that any string schema in the OpenAPI document has a broad pattern using ^
and $
symbols. A string schema is a way of describing a data type that consists of a sequence of characters, such as text, dates, or identifiers. A pattern is a property that specifies a regular expression that the string value must match. A regular expression is a sequence of symbols and characters that define a search pattern for strings. A broad pattern is a pattern that does not restrict the string value much and allows many possible values. For example, the pattern ^.*$
matches any string, including an empty string. The reason why any string schema should be with broad pattern using ^
and $
in OpenAPI is to avoid ambiguity and confusion about the meaning and validity of the string value. The ^
and $
symbols are special characters in regular expressions that indicate the beginning and the end of the string, respectively. By using them, you can ensure that the whole string value matches the pattern, and not just a part of it.
Risk Level: medium
Platform: OpenAPI
Spectral Rule ID: OPENAPI019
REMEDIATION
Add or modify the pattern property for any string schema in the OpenAPI document and use ^ and $ symbols to indicate the start and end of the string value. For example:
components:
schemas:
Email:
type: string
format: email
pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ # This is a broad pattern for email addresses
Date:
type: string
format: date
pattern: ^\d{4}-\d{2}-\d{2}$ # This is a broad pattern for dates in YYYY-MM-DD format
# This is a sample OpenAPI document with some string schemas without broad patterns
openapi: 3.0.0
info:
title: Sample API
version: 1.0.0
servers:
- url: https://api.example.com/v1
paths:
/users/{id}:
get:
summary: Get user by id
parameters:
- name: id
in: path
required: true
schema:
type: integer
format: int64
responses:
'200':
description: A user object
content:
application/json:
schema:
type: object
properties:
id:
type: integer
format: int64
name:
type: string
email:
type: string
format: email # This string schema has no pattern property
birthday:
type: string
format: date # This string schema has no pattern property
+ # Add or modify the pattern property for any string schema in the OpenAPI document
components:
schemas:
Email:
type: string
format: email
+ pattern: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ # This is a broad pattern for email addresses
Date:
type: string
format: date
+ pattern: ^\d{4}-\d{2}-\d{2}$ # This is a broad pattern for dates in YYYY-MM-DD format
Read more:
Updated over 1 year ago