2017 © Pedro Peláez
 

library csrf-guard

Linna Cross-site request forgery Guard

image

linna/csrf-guard

Linna Cross-site request forgery Guard

  • Monday, July 30, 2018
  • by s3b4stian
  • Repository
  • 1 Watchers
  • 3 Stars
  • 16 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 7 Versions
  • 0 % Grown

The README.md

Linna Logo

br/, (*1)

Linna framework Logo

br/, (*2)

[![Tests](https://github.com/linna/csrf-guard/workflows/Tests/badge.svg)](https://github.com/linna/csrf-guard/actions) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=linna_csrf-guard&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=linna_csrf-guard) [![PDS Skeleton](https://img.shields.io/badge/pds-skeleton-blue.svg?style=flat)](https://github.com/php-pds/skeleton) [![PHP 8.1](https://img.shields.io/badge/PHP-8.1-8892BF.svg)](http://php.net)

About

Provide a class for generate and validate tokens utilized against Cross-site Request Forgery., (*3)

Note: Don't consider this class a definitive method to protect your web site/application. If you wish deepen how to prevent csrf you can start here, (*4)

Requirements

This package require * php 7.0 until version v1.1.2 * php 7.1 from v1.2.0 * php 7.4 from v1.4.0 * php 8.1 from v2.0.0, (*5)

Installation

With composer:, (*6)

composer require linna/csrf-guard

Token types

Note: Storage it's intended that the data about token or the token is stored in session., (*7)

The package provides three types of token: - Encryption-based CSRF token - HMAC-based CSRF token - Synchronizer CSRF token, (*8)

Encryption-based token

Encryption-based CSRF token is a token that is the result of a cryptographic algorithm, some data is encrypted using a secret key only known from the server .The implementation in this library uses libsodium aead contruction XChaCha20-Poly1305. The token has expire time and require local storage., (*9)

The token security depends from: - secret key storage - strength of XChaCha20-Poly1305, (*10)

This token is valid until validated or until it expires. It's possible to select a length of the token. The length of the token doesn't affect the storage used., (*11)

The key used for the engryption is generated for every session, the nonce for every token., (*12)

HMAC-based token

HMAC-based CSRF token is a token that is computed by applying an HMAC function to some data and a secret key that is only known from the server. The implementation in this library uses php hash_hmac with the sha3-384 algorithm. This type of token deosn't require local storage and it has an expire time., (*13)

The token security depends from: - secret key storage - strength of sha3-384, (*14)

This token is valid until expires and can be validate more times. Also has fixed length and it's not possible to change it to obtain a shorter or longer token., (*15)

The key used to authenticate is fully managed by the user of the library., (*16)

Synchronizer token

The Synchronizer CSRF token is a token randomly generated. This library uses php random_bytes. The token has expire time and require local storage., (*17)

The token security depends from: - the length of the token, (*18)

This token is valid until validated or until it expires. It's possible to select a length of the token. The length of the token affects the storage used., (*19)

Usage

Note: Session must be started before you create the instance of a provider, if no a SessionNotStartedException will be throw, this is not true if you use the HmacTokenProvider., (*20)

Get started

How to get and validate a token using few lines of code., (*21)

Generate a provider

//start the session
\session_start();

//generate token provider
$provider = ProviderSimpleFactory::getProvider();

Get a token

//previous php code

//get a token from provider
$token = $provider->getToken();

Validate it

//previous php code

//true if valid, false otherwise
$isValid = $provider->validate($token);

Provider configuration

The ProviderSimpleFactory::getProvider() static method has two parameters: - the provider - options for the provider, (*22)

EncryptionTokenProvider config

Options Default Value Unity Range Mandatory
expire 600 seconds 0-86400 no
storageSize 10 tokens 2-64 no
tokenLength 16 bytes 16-128 no

Example of usage:, (*23)

//start the session
\session_start();

//get specific encryption token provider
$provider = ProviderSimpleFactory::getProvider(
    provider: EncryptionTokenProvider::class, // specific token provider
    options: [                                // options
        'expire' => 3600,                     // token expire in 3600 seconds, 1 hour
        'storageSize' => 16,                  // provider can store maximum 1 key and 16 nonces per session,
        'tokenLength' => 16                   // desidered token length in bytes, token will be used as plaintext and not stored
    ]
);

HmacTokenProvider config

Options Default Value Unity Range Mandatory
value // yes
key // yes
expire 600 seconds 0-86400 no

Example of usage:, (*24)

//get specific hmac token provider
$provider = ProviderSimpleFactory::getProvider(
    provider: HmacTokenProvider::class,             // specific token provider
    options: [                                      // options
        'value' => 'value will be hashed in token', // value will be hashed in token
        'key' => 'key_to_authenticate'              // key to authenticate the hash
    ]
);

SynchronizerTokenProvider config

Options Default Value Unity Range Mandatory
expire 600 seconds 0-86400 no
storageSize 10 tokens 2-64 no
tokenLength 32 bytes 16-128 no

Example of usage:, (*25)

//start the session
\session_start();

//get specific syncronizer token provider
$provider = ProviderSimpleFactory::getProvider(
    provider: SynchronizerTokenProvider::class, // specific token provider
    options: [                                  // options
        'expire' => 3600,                       // token expire in 3600 seconds, 1 hour
        'storageSize' => 16,                    // provider can store maximum 16 token per session,
        'tokenLength' => 32                     // desidered token length in bytes, token will be the double in chars
    ]
);

The Versions

30/07 2018

dev-master

9999999-dev https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires

php csrf surf csrf-guard

28/07 2018

dev-b1.2.0

dev-b1.2.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.1

 

The Development Requires

php csrf surf csrf-guard

02/02 2018

dev-b1.1.0

dev-b1.1.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.0

 

The Development Requires

php csrf surf csrf-guard

08/09 2017

v1.1.2

1.1.2.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.0.0

 

php csrf surf csrf-guard

21/08 2017

v1.1.1

1.1.1.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.0.0

 

php csrf surf csrf-guard

20/08 2017

v1.1.0

1.1.0.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.0.0

 

php csrf surf csrf-guard

26/07 2017

v1.0.0

1.0.0.0 https://github.com/linna/csrf-guard

Linna Cross-site request forgery Guard

  Sources   Download

MIT

The Requires

  • php ^7.0.0

 

php csrf surf csrf-guard