PlugStaticLs

Directory Index for Plug/Phoenix Static Assets

Security fix

WARNING: inherent vulnerabilities regarding directory listing

Providing directory listing may reveal following vulnerabilities:

Here is a list of security advisories against making directory listing available to the public:

Do not provide directory listing unless you are 100% sure about the contents in the directory.

Installation

This package is available in Hex as plug_static_ls. The package can be installed as:

  1. Add plug_static_ls to your list of dependencies in mix.exs:
```elixir
def deps do
  [{:plug_static_ls, "~> 0.6.1"}]
end
```
  1. Ensure plug_static_ls is started before your application:
```elixir
def application do
  [applications: [:plug_static_ls]]
end
```

Prerequisites

The filename locale of the Erlang VM must be explicitly specified to UTF-8. See Erlang's erl +fnu option description for the details.

Note: Elixir assumes UTF-8 usage on the filenames and internal strings.

Usage

Add PlugStaticLsafterPlug.Static in endpoint.ex. The access restriction options for PlugStaticLs should include the corresponding setting of Plug.Static. Allow access only to the directories where the index is really required.

plug Plug.Static, at: "/", from: :my_app
plug PlugStaticLs, at: "/", from: :my_app, only: ~w(with_listing)

# Note: non-existent file will be routed here
# Explicit plug to catch this case is required

Dialyzer via dialyxir can be used via mix dialyzer.

License

Apache License 2

Acknowledment

The basic skeleton of this package is derived from static.ex aka Plug.Static module of the Plug repository.

The directory listing page design is derived from Yaws Web Server.