-
-
Notifications
You must be signed in to change notification settings - Fork 5.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix sanitizer config - multiple rules #11133
Changes from 3 commits
58e779a
4042adb
70941e9
5226e15
8cceae9
d0cc385
adce502
8260c4a
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -646,7 +646,7 @@ Two special environment variables are passed to the render command: | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Gitea supports customizing the sanitization policy for rendered HTML. The example below will support KaTeX output from pandoc. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
```ini | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[markup.sanitizer] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[markup.sanitizer.TeX] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; Pandoc renders TeX segments as <span>s with the "math" class, optionally | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
; with "inline" or "display" classes depending on context. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = span | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -658,7 +658,41 @@ REGEXP = ^\s*((math(\s+|$)|inline(\s+|$)|display(\s+|$)))+ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `ALLOW_ATTR`: The attribute this policy allows. Must be non-empty. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- `REGEXP`: A regex to match the contents of the attribute against. Must be present but may be empty for unconditional whitelisting of this attribute. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
You may redefine `ELEMENT`, `ALLOW_ATTR`, and `REGEXP` multiple times; each time all three are defined is a single policy entry. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
**Note**: The above section naming policy is new; previously the section was `[markup.sanitizer]` and keys could be redefined. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Now, a unique identifier must appear in the section name (e.g., `[markup.sanitizer.TeX]`) in order to parse multiple rules. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
This was changed because the implementation with the ini parser used was flawed; the following configs were indistinguishable after parsing: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
```ini | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[markup.sanitizer] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = target | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = rel | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = img | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = src | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
and | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
```ini | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
[markup.sanitizer] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = target | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = img | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = rel | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $2 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ELEMENT = img | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ALLOW_ATTR = src | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
REGEXP = $3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
``` | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Because of limitations in the ini library, we are unable to automatically migrate configurations. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
We will still parse the first rule from a `[markup.sanitizer]` section if present, but multiple rules must be manually migrated. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
I'd rather remove this section. If you feel like an explanation is needed, please reference the version where it was introduced and link the relevant issue or this PR (e.g. "this was changed from the original implementation in 1.11 due to severe limitations; see There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If a blog entry is fine with @zeripath I could write such, but I must confess I've never looked at the blog entries and mostly read documentation. :-) On the breaking section of release notes, there's a link to the PR, but not to the blog entry -- do none of those have blog entries? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hmm... So this bit could be dropped and instead placed in the PR description - during release we can then precis this and put it into the blog post. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
## Time (`time`) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -73,7 +73,7 @@ IS_INPUT_FILE = false | |||||||||||||
If your external markup relies on additional classes and attributes on the generated HTML elements, you might need to enable custom sanitizer policies. Gitea uses the [`bluemonday`](https://godoc.org/github.com/microcosm-cc/bluemonday) package as our HTML sanitizier. The example below will support [KaTeX](https://katex.org/) output from [`pandoc`](https://pandoc.org/). | ||||||||||||||
|
||||||||||||||
```ini | ||||||||||||||
[markup.sanitizer] | ||||||||||||||
[markup.sanitizer.TeX] | ||||||||||||||
; Pandoc renders TeX segments as <span>s with the "math" class, optionally | ||||||||||||||
; with "inline" or "display" classes depending on context. | ||||||||||||||
ELEMENT = span | ||||||||||||||
|
@@ -86,6 +86,11 @@ FILE_EXTENSIONS = .md,.markdown | |||||||||||||
RENDER_COMMAND = pandoc -f markdown -t html --katex | ||||||||||||||
``` | ||||||||||||||
|
||||||||||||||
You may redefine `ELEMENT`, `ALLOW_ATTR`, and `REGEXP` multiple times; each time all three are defined is a single policy entry. All three must be defined, but `REGEXP` may be blank to allow unconditional whitelisting of that attribute. | ||||||||||||||
You must define `ELEMENT`, `ALLOW_ATTR`, and `REGEXP` in each section. | ||||||||||||||
|
||||||||||||||
To define multiple entries, define different section names (e.g., `[markup.sanitizer.1]` and `[markup.sanitizer.2]`). | ||||||||||||||
These can be numbers, identifying names, or anything else. | ||||||||||||||
|
||||||||||||||
Once your configuration changes have been made, restart Gitea to have changes take effect. | ||||||||||||||
|
||||||||||||||
**Note**: The above section numbering policy is new; previously the section was `[markup.sanitizer]` and keys could be redefined. | ||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Same as above There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I had specifically requested some information as this is a breaking change requiring change to config (although the previous config simply does not work.) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To avoid duplicating too much info, I've added a reference to the cheat sheet here but explicitly left this line. Its either that or add a reference to this pull request (in both places) if we don't want it in the documentation -- but to someone wanting to migrate, it isn't clear what the problem is just by looking at our extended discussion here. :-) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. How about:
Suggested change
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Sorry, @zeripath. I missed your comment, which was already resolved. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think "this section can appear with an incrementing numbers to define multiple rules" is correct English either.
I've made it just "This section can appear again with a unique alphanumeric string to define multiple rules".