mirror of
https://github.com/astral-sh/ruff.git
synced 2025-09-28 12:55:05 +00:00
[ruff
] Adds an allowlist for unsafe-markup-use
(RUF035
) (#15076)
Closes: #14523 ## Summary Adds a whitelist of calls allowed to be used within a `markupsafe.Markup` call. ## Test Plan `cargo nextest run`
This commit is contained in:
parent
913bce3cd5
commit
089a98e904
8 changed files with 120 additions and 10 deletions
|
@ -3079,18 +3079,49 @@ pub struct RuffOptions {
|
|||
)]
|
||||
pub parenthesize_tuple_in_subscript: Option<bool>,
|
||||
|
||||
/// A list of additional callable names that behave like [`markupsafe.Markup`].
|
||||
/// A list of additional callable names that behave like
|
||||
/// [`markupsafe.Markup`](https://markupsafe.palletsprojects.com/en/stable/escaping/#markupsafe.Markup).
|
||||
///
|
||||
/// Expects to receive a list of fully-qualified names (e.g., `webhelpers.html.literal`, rather than
|
||||
/// `literal`).
|
||||
///
|
||||
/// [markupsafe.Markup]: https://markupsafe.palletsprojects.com/en/stable/escaping/#markupsafe.Markup
|
||||
#[option(
|
||||
default = "[]",
|
||||
value_type = "list[str]",
|
||||
example = "extend-markup-names = [\"webhelpers.html.literal\", \"my_package.Markup\"]"
|
||||
)]
|
||||
pub extend_markup_names: Option<Vec<String>>,
|
||||
|
||||
/// A list of callable names, whose result may be safely passed into
|
||||
/// [`markupsafe.Markup`](https://markupsafe.palletsprojects.com/en/stable/escaping/#markupsafe.Markup).
|
||||
///
|
||||
/// Expects to receive a list of fully-qualified names (e.g., `bleach.clean`, rather than `clean`).
|
||||
///
|
||||
/// This setting helps you avoid false positives in code like:
|
||||
///
|
||||
/// ```python
|
||||
/// from bleach import clean
|
||||
/// from markupsafe import Markup
|
||||
///
|
||||
/// cleaned_markup = Markup(clean(some_user_input))
|
||||
/// ```
|
||||
///
|
||||
/// Where the use of [`bleach.clean`](https://bleach.readthedocs.io/en/latest/clean.html)
|
||||
/// usually ensures that there's no XSS vulnerability.
|
||||
///
|
||||
/// Although it is not recommended, you may also use this setting to whitelist other
|
||||
/// kinds of calls, e.g. calls to i18n translation functions, where how safe that is
|
||||
/// will depend on the implementation and how well the translations are audited.
|
||||
///
|
||||
/// Another common use-case is to wrap the output of functions that generate markup
|
||||
/// like [`xml.etree.ElementTree.tostring`](https://docs.python.org/3/library/xml.etree.elementtree.html#xml.etree.ElementTree.tostring)
|
||||
/// or template rendering engines where sanitization of potential user input is either
|
||||
/// already baked in or has to happen before rendering.
|
||||
#[option(
|
||||
default = "[]",
|
||||
value_type = "list[str]",
|
||||
example = "allowed-markup-calls = [\"bleach.clean\", \"my_package.sanitize\"]"
|
||||
)]
|
||||
pub allowed_markup_calls: Option<Vec<String>>,
|
||||
}
|
||||
|
||||
impl RuffOptions {
|
||||
|
@ -3100,6 +3131,7 @@ impl RuffOptions {
|
|||
.parenthesize_tuple_in_subscript
|
||||
.unwrap_or_default(),
|
||||
extend_markup_names: self.extend_markup_names.unwrap_or_default(),
|
||||
allowed_markup_calls: self.allowed_markup_calls.unwrap_or_default(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue