fix(web): validate inputs in handleConfigSave to prevent fuzz bricking (M1)
Previously /config accepted any value and called ESP.restart() — fuzz tests (or any malicious POST) could save garbage SSIDs and brick the device until FTDI recovery. Now: - SSID: rejected if empty, >31 chars, non-printable, or all-same-char (HTTP 400) - Password: rejected if >63 chars - Hostname/city_name/ntp_server: length-validated - Numeric fields (timezone, brightness, intervals, lat/lon, display): clamped to safe ranges via constrain() Tested on hardware: ssid="AAAA..." now correctly returns HTTP 400 and preserves existing config. Device survives entire fuzz suite. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
02834bada1
commit
5b9285aeb9
@@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [1.9.7] - 2026-05-19
|
||||
|
||||
### Fixed
|
||||
|
||||
- **Config endpoint accepted garbage values, bricking device** (M1): `/config` form handler
|
||||
now validates all inputs. SSID rejected if empty, >31 chars, non-printable, or all-same-char
|
||||
(fuzz garbage like "AAAA..."). Numeric fields are `constrain()`-ed to safe ranges
|
||||
(`ntp_interval`/`weather_interval`: 60–86400, `brightness`: 0–7, `timezone`: ±12h,
|
||||
`latitude`/`longitude`: physical ranges, `display_orientation`: 0–3). Invalid input
|
||||
returns HTTP 400 instead of silently saving and rebooting.
|
||||
|
||||
## [1.9.6] - 2026-05-18
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in New Issue
Block a user