A Shadow Daemon connector for Perl applications
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib/Shadowd
misc/examples
t
.gitignore
.travis.yml
Changes
LICENSE
MANIFEST
Makefile.PL
README.md
ignore.txt

README.md

Build Status Logo

Shadow Daemon is a collection of tools to detect, record and prevent attacks on web applications. Technically speaking, Shadow Daemon is a web application firewall that intercepts requests and filters out malicious parameters. It is a modular system that separates web application, analysis and interface to increase security, flexibility and expandability.

This component can be used to connect Perl applications with the background server.

Documentation

For the full documentation please refer to shadowd.zecure.org.

Installation

You can install the modules with CPAN:

cpan -i Shadowd::Connector

It is also possible to clone this repository and install the modules manually:

perl Makefile.PL
make
make install

You also have to create a configuration file. You can copy misc/examples/connectors.ini to /etc/shadowd/connectors.ini. The example configuration is annotated and should be self-explanatory.

CGI

To protect CGI applications you simply have to load the module:

use Shadowd::Connector::CGI;

This can be automated by executing Perl scripts with:

perl -mShadowd::Connector::CGI

Mojolicious

Mojolicious applications require a small modification. It is necessary to create a hook to intercept requests:

use Shadowd::Connector::Mojolicious;

sub startup {
  my $app = shift;

  $app->hook(before_dispatch => sub {
    my $self = shift;
    return Shadowd::Connector::Mojolicious->new($self)->start();
  });

  # ...
}

Mojolicious::Lite

Mojolicious::Lite applications require a small change as well:

use Shadowd::Connector::Mojolicious;

under sub {
  my $self = shift;
  return Shadowd::Connector::Mojolicious->new($self)->start();
};

The connector is only executed if the request matches a route.