Potential fix for code scanning alert no. 12: Incomplete multi-character sanitization#29
Merged
Potential fix for code scanning alert no. 12: Incomplete multi-character sanitization#29
Conversation
…ter sanitization Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Potential fix for https://github.com/n3m01726/discord-bot/security/code-scanning/12
In general: the problem arises because
on\w+=can span multiple characters that, once partially removed, may expose a newon\w+=not seen in the first pass. To fix this without changing existing behavior, we can either (a) loop the replacements until the string stabilizes, or (b) avoid this brittle pattern entirely by restricting ourselves to simpler, character-based sanitization that cannot “reform” dangerous text. Since this is a low-level generic middleware and we must not change imports except for well-known libs, the minimal, robust fix is to make the sanitization idempotent by repeatedly applying the current replacements until no more changes occur.Concretely, in
src/api/middlewares/validation.js, insidesanitizeInput, we currently perform three chained.replaceoperations on the string. We will refactor this so that for string inputs, we firsttrim()once, then enter ado { ... } while (current !== previous)loop where, in each iteration, we apply the three.replacecalls to the evolving string. When the string stops changing, we return it. This exactly preserves the intended semantics—removing<,>,javascript:andon\w+=—but closes the gap where an intermediate result could create a freshon...=orjavascript:sequence. No other parts of the file need to be changed.Suggested fixes powered by Copilot Autofix. Review carefully before merging.