Code Explainers

Code explainers tagged #input-validation

go
func UploadChunk(c *gin.Context) {
	uploadID := c.Param("uploadID")
	if !validUploadID.MatchString(uploadID) {
		c.JSON(http.StatusBadRequest, gin.H{"error": "invalid upload id"})

Resumable chunked uploads in Gin

file-upload content-range streaming
Advanced 9 steps
go
package handlers
 
import (
	"encoding/json"

Parsing search query params in a Go handler

http-handlers input-validation defaults
Intermediate 7 steps
go
func ListProducts(c *gin.Context) {
	allowed := map[string]string{
		"category": "category",
		"brand":    "brand",

Safe query filtering in a Gin handler

input-validation whitelisting query-building
Intermediate 7 steps
ruby
class SearchController < ApplicationController
  def index
    @query = params[:q].to_s.strip
  end

Live search suggestions in a Rails controller

controllers sql-injection query-building
Intermediate 6 steps
typescript
import sanitizeHtml from "sanitize-html";
 
interface RichTextOptions {
  allowImages?: boolean;

Building a configurable HTML sanitizer allowlist

sanitization xss-prevention allowlist
Intermediate 7 steps
php
<?php
 
namespace App\Support;
 

Normalizing phone numbers to E.164 in PHP

input-validation normalization regular-expressions
Intermediate 8 steps
go
func ListArticles(db *gorm.DB) gin.HandlerFunc {
	return func(c *gin.Context) {
		page, err := strconv.Atoi(c.DefaultQuery("page", "1"))
		if err != nil || page < 1 {

Building a paginated list endpoint in Gin

pagination query-parameters input-validation
Intermediate 8 steps
go
package handlers
 
import (
	"encoding/json"

Hardening JSON decoding in Go HTTP handlers

json error-handling http
Intermediate 8 steps
typescript
interface PaginationParams {
  totalItems: number;
  pageSize: number;
  currentPage: number;

Building safe pagination metadata in TypeScript

pagination input-validation pure-functions
Intermediate 7 steps
javascript
const express = require('express');
const router = express.Router();
const db = require('../db');
 

Building a paginated articles endpoint in Express

pagination input-validation async-await
Intermediate 8 steps
go
type SensorReading struct {
	DeviceID    string    `json:"device_id" binding:"required"`
	Temperature float64   `json:"temperature"`
	RecordedAt  time.Time `json:"recorded_at" binding:"required"`

Streaming NDJSON ingestion in Gin

streaming batching json-decoding
Advanced 10 steps
go
package search
 
import (
	"net/url"

Building a query URL from a Filter struct in Go

url-encoding struct-methods input-validation
Intermediate 8 steps
java
@RestController
@RequestMapping("/api/files")
public class FileUploadController {
 

Handling secure file uploads in Spring

file-upload input-validation path-traversal
Intermediate 10 steps
ruby
class ArticlesController < ApplicationController
  DEFAULT_LIMIT = 25
  MAX_LIMIT = 100
 

Cursor-based pagination in a Rails controller

pagination cursor query-building
Intermediate 7 steps
php
<?php
 
class ImageUploadService
{

Validating file uploads safely in PHP

file-upload input-validation security
Intermediate 8 steps
php
<?php
 
namespace App\View;
 

Building a safe HTML escaper in PHP

security xss escaping
Intermediate 6 steps
php
<?php
 
final class ProductRepository
{

Safe SQL pagination with PDO in PHP

pagination input-validation prepared-statements
Intermediate 7 steps
python
from flask import Blueprint, render_template, request, abort
from sqlalchemy import select
 
from .models import Article

Paginating articles in a Flask Blueprint

pagination blueprints input-validation
Intermediate 6 steps