Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

Use type system to prevent request validation bypasses

Open
#59 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
5/5
Estimated time
Over a week
Newbie friendliness
30/100
Issue type
Refactor
Clarity
Needs clarification
Activity status
Stale
Tech stack
rust

Research direction

Start by locating the proxy request-handling entry point and the RuleEngine, then trace how requests are validated, transformed, and sent upstream. The issue names no files or tests; done means upstream forwarding accepts only a type that can be created after validation, with the Host-header and related bypass checks covered.

Written by the indexing model from the issue text.

Description

Summary

We should refactor the proxy request handling to use the type system to ensure all requests passed to upstream servers have been validated by the RuleEngine, making it impossible at compile time to accidentally bypass security checks.

Background

While fixing the Host header bypass vulnerability (#57), we added runtime validation to ensure the Host header matches the URI. However, this and similar security checks could be better enforced through the type system.

Proposed Solution

Introduce type-safe request handling that guarantees validation:

// Example approach
struct ValidatedRequest {
    // Can only be constructed after passing RuleEngine validation
    inner: Request<BoxBody<Bytes, HyperError>>,
}

impl ValidatedRequest {
    // Private constructor - only RuleEngine can create these
    fn new(request: Request, validation_result: RuleEvaluation) -> Result<Self> {
        // Ensure all headers match validated URL
        // Apply any security transformations
    }
}

// Upstream client only accepts ValidatedRequest
fn send_to_upstream(request: ValidatedRequest) -> Result<Response> {
    // Impossible to send unvalidated requests
}

Benefits

  1. Compile-time safety - Makes it impossible to accidentally forward unvalidated or modified requests
  2. Clear security boundaries - Type system enforces that all upstream requests go through validation
  3. Prevents regression - New code can't accidentally bypass security checks
  4. Self-documenting - Types make security requirements explicit
Dominant language
Rust
Stars
961
Forks
29
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from coder/httpjail

All issues in coder/httpjail

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.