Skip to content

[enhancement] Add input validation to backend search endpoint #29

@pragnyanramtha

Description

@pragnyanramtha

Enhancement Description

The /api/search endpoint accepts a q query parameter without any validation. This could lead to issues with extremely long strings or malicious input.

Location

backend/routers/medicines.py (lines 110-118)

Current Code

@router.get("/search", response_model=List[Medicine])
def search_medicines(
    q: str, 
    category: Optional[str] = None, 
    limit: int = 20, 
    offset: int = 0
):
    try:
        query = supabase.table("medicines").select("*").ilike("medicine_name", f"%{q}%")

Problem

  • No maximum length validation on q parameter
  • No sanitization of input
  • Could cause performance issues with very long strings
  • Potential for abuse

Suggested Fix

Add validation:

from pydantic import BaseModel, validator

class SearchQuery(BaseModel):
    q: str
    category: Optional[str] = None
    limit: int = 20
    offset: int = 0
    
    @validator('q')
    def q_must_be_valid(cls, v):
        if len(v) > 100:
            raise ValueError('Query too long (max 100 chars)')
        if not v.strip():
            raise ValueError('Query cannot be empty')
        return v.strip()

Impact

  • Better security
  • Prevents abuse
  • Improved performance

Labels

enhancement, backend, security, good first issue

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions