Fix #970: Block local file read bypasses via UNC paths and protocol-relative URLs#972
Merged
freekmurze merged 1 commit intomainfrom Feb 9, 2026
Merged
Conversation
…elative URLs - Add `\\` to unsafeProtocols to block UNC path attacks (e.g. `\\localhost/etc/passwd`) - Add targeted regex check in setHtml() for protocol-relative URLs pointing to local addresses (localhost, 127.x.x.x, 0.0.0.0, [::1]) - Does NOT add `//` to unsafeProtocols as that would break all HTML containing URLs Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
I am receiving this error after this change: Spatie\Browsershot\Exceptions\HtmlIsNotAllowedToContainFile Here is an excerpt from the code: |
Member
Author
|
This has been fixed in the latest release. |
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.
Summary
Addresses the security issue raised in #970 (local file read via
\\localhost/...and//127.0.0.1/...bypasses), but with a corrected approach:\\tounsafeProtocols, blocking HTML containing double-backslash patterns like<iframe src="\\localhost/etc/passwd">setHtml()that blocks//followed by local addresses (localhost, 127.x.x.x, 0.0.0.0, [::1])Why not just add
//tounsafeProtocols?The original PR #970 added
//to theunsafeProtocolsarray. This would breaksetHtml()completely because the check usesstr_contains()— every HTML document with a URL likehttps://example.comcontains//. The regex approach targets only local addresses while allowing legitimate protocol-relative URLs like//cdn.example.com/style.css.Test plan
\\localhost,\\127.0.0.1)//localhost,//127.x.x.x,//0.0.0.0,//[::1])🤖 Generated with Claude Code