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::Command - Command base class

SYNOPSIS

# Lower case command name
package Mojolicious::Command::mycommand;

# Subclass
use Mojo::Base 'Mojo::Command';

# Take care of command line options
use Getopt::Long 'GetOptions';

# Short description
has description => <<'EOF';
My first Mojo command.
EOF

# Short usage message
has usage => <<"EOF";
usage: $0 mycommand [OPTIONS]

These options are available:
  --something   Does something.
EOF

# <suitable Futurama quote here>
sub run {
  my $self = shift;

  # Handle options
  local @ARGV = @_;
  GetOptions('something' => sub { $something = 1 });

  # Magic here! :)
}

DESCRIPTION

Mojo::Command is an abstract base class for Mojo commands.

See Mojolicious::Commands for a list of commands that are available by default.

ATTRIBUTES

Mojo::Command implements the following attributes.

description

my $description = $command->description;
$command        = $command->description('Foo!');

Short description of command, used for the command list.

hint

my $hint  = $commands->hint;
$commands = $commands->hint('Foo!');

Short hint shown after listing available commands.

message

my $message = $commands->message;
$commands   = $commands->message('Hello World!');

Short usage message shown before listing available commands.

namespaces

my $namespaces = $commands->namespaces;
$commands      = $commands->namespaces(['Mojolicious::Commands']);

Namespaces to search for available commands, defaults to Mojo::Command.

quiet

my $quiet = $command->quiet;
$command  = $command->quiet(1);

Limited command output.

usage

my $usage = $command->usage;
$command  = $command->usage('Foo!');

Usage information for command, used for the help screen.

METHODS

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

app

my $app = $command->app;

Currently active application, defaults to a Mojo::HelloWorld object.

chmod_file

$command = $command->chmod_file('/foo/bar.txt', 0644);

Portably change mode of a file.

chmod_rel_file

$command = $command->chmod_rel_file('foo/bar.txt', 0644);

Portably change mode of a relative file.

class_to_file

my $file = $command->class_to_file('Foo::Bar');

Convert a class name to a file.

Foo::Bar -> foo_bar
FOO::Bar -> foobar
FooBar   -> foo_bar
FOOBar   -> foobar

class_to_path

my $path = $command->class_to_path('Foo::Bar');

Convert class name to path.

Foo::Bar -> Foo/Bar.pm

create_dir

$command = $command->create_dir('/foo/bar/baz');

Portably create a directory.

create_rel_dir

$command = $command->create_rel_dir('foo/bar/baz');

Portably create a relative directory.

detect

my $env = $commands->detect;
my $env = $commands->detect($guess);

Try to detect environment.

get_all_data

my $all = $command->get_all_data;
my $all = $command->get_all_data('Some::Class');

Extract all embedded files from the DATA section of a class.

get_data

my $data = $command->get_data('foo_bar');
my $data = $command->get_data('foo_bar', 'Some::Class');

Extract embedded file from the DATA section of a class.

help

$command->help;

Print usage information for command.

rel_dir

my $path = $command->rel_dir('foo/bar');

Portably generate an absolute path from a relative UNIX style path.

rel_file

my $path = $command->rel_file('foo/bar.txt');

Portably generate an absolute path from a relative UNIX style path.

render_data

my $data = $command->render_data('foo_bar', @arguments);

Render a template from the DATA section of the command class.

render_to_file

$command = $command->render_to_file('foo_bar', '/foo/bar.txt');

Render a template from the DATA section of the command class to a file.

render_to_rel_file

$command = $command->render_to_rel_file('foo_bar', 'foo/bar.txt');

Portably render a template from the DATA section of the command class to a relative file.

run

$commands->run;
$commands->run(@ARGV);

Load and run commands.

start

Mojo::Command->start;
Mojo::Command->start(@ARGV);

Start the command line interface.

write_file

$command = $command->write_file('/foo/bar.txt', 'Hello World!');

Portably write text to a file.

write_rel_file

$command = $command->write_rel_file('foo/bar.txt', 'Hello World!');

Portably write text to a relative file.

SEE ALSO

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