Security Advisories (10)
CPANSA-Mojolicious-2022-03 (2022-12-10)

Mojo::DOM did not correctly parse <script> tags.

CPANSA-Mojolicious-2021-02 (2021-06-01)

Small sessions could be used as part of a brute-force attack to decode the session secret.

CVE-2021-47208 (2021-03-16)

A bug in format detection can potentially be exploited for a DoS attack.

CVE-2018-25100 (2018-02-13)

Mojo::UserAgent::CookieJar leaks old cookies because of the missing host_only flag on empty domain.

CPANSA-Mojolicious-2015-01 (2015-02-02)

Directory traversal on Windows

CPANSA-Mojolicious-2018-03 (2018-05-19)

Mojo::UserAgent was not checking peer SSL certificates by default.

CVE-2020-36829 (2020-11-10)

Mojo::Util secure_compare can leak the string length. By immediately returning when the two strings are not the same length, the function allows an attacker to guess the length of the secret string using timing attacks.

CPANSA-Mojolicious-2018-02 (2018-05-11)

GET requests with embedded backslashes can be used to access local files on Windows hosts

CPANSA-Mojolicious-2014-01 (2014-10-07)

Context sensitivity of method param could lead to parameter injection attacks.

CVE-2024-58134 (2025-05-03)

Mojolicious versions from 0.999922 for Perl uses a hard coded string, or the application's class name, as a HMAC session secret by default. These predictable default secrets can be exploited to forge session cookies. An attacker who knows or guesses the secret could compute valid HMAC signatures for the session cookie, allowing them to tamper with or hijack another user's session.

NAME

Mojo::DOM::CSS - CSS3 selector engine

SYNOPSIS

use Mojo::DOM::CSS;

# Select elements from DOM tree
my $css = Mojo::DOM::CSS->new(tree => $tree);
my $elements = $css->select('h1, h2, h3');

DESCRIPTION

Mojo::DOM::CSS is the CSS3 selector engine used by Mojo::DOM. Note that this module is EXPERIMENTAL and might change without warning!

SELECTORS

All CSS3 selectors that make sense for a standalone parser are supported.

*

Any element.

my $first = $css->select('*');

E

An element of type E.

my $title = $css->select('title');

E[foo]

An E element with a foo attribute.

my $links = $css->select('a[href]');

E[foo="bar"]

An E element whose foo attribute value is exactly equal to bar.

my $fields = $css->select('input[name="foo"]');

E[foo~="bar"]

An E element whose foo attribute value is a list of whitespace-separated values, one of which is exactly equal to bar.

my $fields = $css->select('input[name~="foo"]');

E[foo^="bar"]

An E element whose foo attribute value begins exactly with the string bar.

my $fields = $css->select('input[name^="f"]');

E[foo$="bar"]

An E element whose foo attribute value ends exactly with the string bar.

my $fields = $css->select('input[name$="o"]');

E[foo*="bar"]

An E element whose foo attribute value contains the substring bar.

my $fields = $css->select('input[name*="fo"]');

E:root

An E element, root of the document.

my $root = $css->select(':root');

E:checked

A user interface element E which is checked (for instance a radio-button or checkbox).

my $input = $css->select(':checked');

E:empty

An E element that has no children (including text nodes).

my $empty = $css->select(':empty');

E:nth-child(n)

An E element, the n-th child of its parent.

my $third = $css->select('div:nth-child(3)');
my $odd   = $css->select('div:nth-child(odd)');
my $even  = $css->select('div:nth-child(even)');
my $top3  = $css->select('div:nth-child(-n+3)');

E:nth-last-child(n)

An E element, the n-th child of its parent, counting from the last one.

my $third    = $css->select('div:nth-last-child(3)');
my $odd      = $css->select('div:nth-last-child(odd)');
my $even     = $css->select('div:nth-last-child(even)');
my $bottom3  = $css->select('div:nth-last-child(-n+3)');

E:nth-of-type(n)

An E element, the n-th sibling of its type.

my $third = $css->select('div:nth-of-type(3)');
my $odd   = $css->select('div:nth-of-type(odd)');
my $even  = $css->select('div:nth-of-type(even)');
my $top3  = $css->select('div:nth-of-type(-n+3)');

E:nth-last-of-type(n)

An E element, the n-th sibling of its type, counting from the last one.

my $third    = $css->select('div:nth-last-of-type(3)');
my $odd      = $css->select('div:nth-last-of-type(odd)');
my $even     = $css->select('div:nth-last-of-type(even)');
my $bottom3  = $css->select('div:nth-last-of-type(-n+3)');

E:first-child

An E element, first child of its parent.

my $first = $css->select('div p:first-child');

E:last-child

An E element, last child of its parent.

my $last = $css->select('div p:last-child');

E:first-of-type

An E element, first sibling of its type.

my $first = $css->select('div p:first-of-type');

E:last-of-type

An E element, last sibling of its type.

my $last = $css->select('div p:last-of-type');

E:only-child

An E element, only child of its parent.

my $lonely = $css->select('div p:only-child');

E:only-of-type

An E element, only sibling of its type.

my $lonely = $css->select('div p:only-of-type');

E.warning

my $warning = $css->select('div.warning');

An E element whose class is "warning".

E#myid

my $foo = $css->select('div#foo');

An E element with ID equal to "myid".

E:not(s)

An E element that does not match simple selector s.

my $others = $css->select('div p:not(:first-child)');

E F

An F element descendant of an E element.

my $headlines = $css->select('div h1');

E > F

An F element child of an E element.

my $headlines = $css->select('html > body > div > h1');

E + F

An F element immediately preceded by an E element.

my $second = $css->select('h1 + h2');

E ~ F

An F element preceded by an E element.

my $second = $css->select('h1 ~ h2');

E, F, G

Elements of type E, F and G.

my $headlines = $css->select('h1, h2, h3');

E[foo=bar][bar=baz]

An E element whose attributes match all following attribute selectors.

my $links = $css->select('a[foo^="b"][foo$="ar"]');

ATTRIBUTES

Mojo::DOM::CSS implements the following attributes.

tree

my $tree = $css->tree;
$css     = $css->tree(['root', ['text', 'lalala']]);

Document Object Model.

METHODS

Mojo::DOM::CSS inherits all methods from Mojo::Base and implements the following new ones.

select

my $results = $css->select('head > title');

Run CSS3 selector against tree.

SEE ALSO

Mojolicious, Mojolicious::Guides, http://mojolicio.us.