a script to easily restrict access to a web page/php script... just include auto_restrict.php !
Branch: master
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.
auto_restrict.php
index.php
login_form.php
readme.md

readme.md

#Auto_restrict 3.3 ##(engish version below)(at least a poor one ;-)

Un simple script à inclure dans une page ou un script php pour en sécuriser l'accès. Il faut inclure ce script avant la partie à sécuriser ou le plus tôt possible dans la page.

##Fonctions:

  • gestion de la création de login/passe lors de la première connexion
  • option "rester connecté" (cookie + token correspondant)
  • prise en compte des problèmes de referer (seuls les scripts se trouvant sur le même serveur sont autorisés)
  • tokens pour sécuriser les envois de données $_POST et $_GET.
  • gestion transparente du bannissement d'IP lors de tentatives frauduleuses (login/passe faux, referrer erroné ou problème de token)
  • variables de configuration du script avec valeurs par défaut
  • sécurisation des formulaires sensibles via une simple fonction (ajout d'une case répéter passe admin)
  • sécurisation automatique et transparente des $_POST et $_GET via un strip_tags (débrayable)

##Usage: Ajouter à une page et son accès est verrouillé.

On peut ainsi interdire l'accès à des pages de configuration par exemple. S'il s'agit d'un script de gestion de données $_POST:

  • on ajoute au début de la page de formulaire et la ligne à l'intérieur de ce dernier.
  • on ajoute dans le script appelé par le formulaire. Auto_restrict se chargera de gérer les tokens pour ce formulaire.
  • pour un formulaire sensible, on peut ajouter dans le formulaire et auto_restrict vérifiera le passe avant de passer la main et bloquera en cas de passe erroné.

S'il s'agit de données $_GET:

  • on procède de même pour les formulaires
  • on ajoute simplement à la fin des liens contenant des $_GET à sécuriser (la page cible devra inclure auto_restrict.php, bien entendu)

Pour créer un lien permettant de se déconnecter, ajouter simplement "?logout=ok" ou"?deconnexion=ok" à n'importe quelle url contenant un include d'auto_restrict.

##Configuration du script Certaines variables de configuration permettent d'adapter le comportement d'auto_restrict, il suffit de les redéfinir avant include:

  • $auto_restrict['just_die_if_not_logged']: si à true, ne charge pas le formulaire de login si aucun utilisateur n'est loggué (pour éviter de voir apparaître le formulaire de connexion lors d'un accès via Ajax à un script php protégé par exemple)
  • $auto_restrict['just_die_on_errors']: si à true, toute action dont la sécurité est compromise génère un message d'erreur; à false, la session est fermée et on est redirigé vers le formulaire de login.
  • $auto_restrict['session_expiration_delay']: durée de vie de la session en minutes
  • $auto_restrict['cookie_expiration_delay']: durée de vie du cookie en jours
  • $auto_restrict['IP_banned_expiration_delay']: durée de bannissement d'IP en secondes
  • $auto_restrict['max_security_issues_before_ban'])): nombre maximum de problèmes de sécurité avant bannissement
  • $auto_restrict['tokens_expiration_delay']: durée de vie des tokens en secondes
  • $auto_restrict['use_GET_tokens_too']: utiliser également les tokens pour les variables $_GET
  • $auto_restrict['use_ban_IP_on_token_errors']: utiliser le système de bannissement lors d'une erreur de token
  • $auto_restrict['POST_striptags'] & $auto_restrict['GET_striptags']: strip_tags de sécurité automatique sur les données post et get
  • $auto_restrict['root'], $auto_restrict['path_from_root']: en cas d'appel depuis des scripts placés à des endroits différents de l'arborescence, il peut être utile de spécifier le root et le chemin vers auto_restrict.

exemple de configuration plus avancée

Un fichier php appelé via ajax.

// rétablissement du contexte d'appel *****************
$auto_restrict['root']='../../';
// éviter expiration du token après un usage si le user répète la commande 
// sans recharger le formulaire d'origine (pas de renouvellement du token)
$auto_restrict['kill_tokens_after_use']=false; 
$auto_restrict['path_from_root']='./LIBS';
include($auto_restrict['root'].'LIBS/auto_restrict.php');
// ********************************************
(...)

De même, on pourra modifier la durée d'expiration des tokens ou de la session en fonction du type de page:

  • page de config d'une appli: délais courts (peu de temps de travail)
  • page de création de contenu: délais plus longs.

##Information A single script to include in a php page to secure the access.

  • login/pass creation on first connection
  • option "stay connected"
  • handle the referer problems (allow only scripts on the same domain)
  • tokens to secure the forms and the $_POST/$_GET data
  • IP bannishment to avoid bruteforcing
  • easy secure sensitive forms with admin password
  • secure post & get data

Use

Just add in your script and the access is locked. You can lock the access to an admin pge, a configuration script etc.

How to use with forms:

  • add in the form's page
  • add in the form's action php script
  • add inside the form.
  • when you want to secure a sensitive form, use inside the form. You can specify a label text and/or a placeholder text adminPassword('label text',placeholder text');
  • that's it !

if you want to secure a script's URL with $_GET commands:

  • add in the page containing the link
  • add at the end of the link's href
  • add in the destination page

To create a logout link, just add "?logout=ok" at the end (the target link must include auto_restrict, of course ^^).

##Configuration Ther's a few configuration vars. Change them before the script's include:

  • $auto_restrict['just_die_if_not_logged']: if true, don't redirect to login form if there's no user logged (avoid redirect in case on ajax access to the page for example)
  • $auto_restrict['just_die_on_errors']: if true, the script just ends on all the security problems; if false, redirect to login form on security problem.
  • $auto_restrict['session_expiration_delay']: session duration in minutes
  • $auto_restrict['cookie_expiration_delay']: cookie duration in days
  • $auto_restrict['IP_banned_expiration_delay']: bannishment duration in seconds
  • $auto_restrict['max_security_issues_before_ban']))
  • $auto_restrict['tokens_expiration_delay']: tokens duration in minutes
  • $auto_restrict['use_GET_tokens_too']: also use tokens with $_GET vars
  • $auto_restrict['use_ban_IP_on_token_errors']: ban IP if there's a token security problem