Skip to main content

49. Secure Input and Output Design in Web Contexts

Web apps must handle all inputs and outputs as untrusted, regardless of source.

Example

from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route("/api", methods=["POST"])
def api():
data = request.get_json()
if not isinstance(data, dict) or "name" not in data:
return jsonify({"error": "Invalid data"}), 400
safe_name = data["name"].replace("<", "&lt;").replace(">", "&gt;")
return jsonify({"message": f"Hello {safe_name}"})

Lesson: Validate every incoming field, encode all outgoing data, and never trust client input.