<?php
 
/**
 
 * security.config.php
 
 *
 
 * Main application security configuration parameters.
 
 * You can change these values according to your security
 
 * MySQL environment or for the Chiper preferences
 
 *
 
 * @filesource security.config.php
 
 * @author Rosario Carvello <[email protected]>
 
 * @version GIT:v1.0.0
 
 * @copyright (c) 2016 Rosario Carvello <[email protected]> - All rights reserved. See License.txt file
 
 * @license BSD Clause 3 License
 
 * @license https://opensource.org/licenses/BSD-3-Clause This software is distributed under BSD-3-Clause Public License
 
 */
 
 
/**
 
 * Defines all constants for qualifying MySQL User table.
 
 * The framework built-in class User uses these information.
 
 */
 
 
/**
 
 *  Constant representing the User MySQL Table name
 
 */
 
define("USER_TABLE","user");
 
 
/**
 
 *  Constant representing the (mandatory integer) primary key field
 
 *  used to identify a user
 
 */
 
define("USER_ID","id_user");
 
 
/**
 
 *  Defines a constant representing (mandatory unique) EMAIL field name.
 
 *  Note: Email is required as user Login name
 
 */
 
define("USER_EMAIL","email");
 
 
/**
 
 *  Defines a constant representing the PASSWORD field name.
 
 *  Note: password is used during login process
 
 */
 
define("USER_PASSWORD","password");
 
 
/**
 
 *  Defines a constant representing the (mandatory integer) ROLE field used
 
 *  for grouping users that must have the same access level rights
 
 *  on controllers.
 
 *  Note: The framework R.B.A.C. (Role Based Access Control) Engine can
 
 *  grant access to one ore more roles on controllers execution
 
 *
 
 */
 
define('USER_ROLE', 'id_access_level');
 
 
/**
 
 *  Defines a constant representing the SALT field.
 
 *  Salt is used for user password encryption. Leave it blank If you
 
 *  don't like to use it and using a system default one.
 
 */
 
define('USER_SALT', 'salt');
 
 
/**
 
 *  Defines a constant representing  the (mandatory integer) USER_ENABLED
 
 *  field used as flag for enabling/disabling user.
 
 *  Only enabled users are able to authenticate and login on the system.
 
 *  If you don't like to manage this capabilities leave blank this value.
 
 *  The value that this field can assume are only:
 
 *     1 (for enabling a user to authentication)
 
 *     or
 
 *    -1 (for temporary disabling user).
 
 */
 
define('USER_ENABLED', 'enabled');
 
 
/**
 
 *  Defines a constant representing  the USER token
 
 *  field
 
 */
 
define('USER_TOKEN', 'token');
 
 
/**
 
 *  Defines a constant representing  the USER token timestamp
 
 *  field used to manage token expiration
 
 */
 
define('USER_TOKEN_TS', 'token_timestamp');
 
 
/**
 
 *  Defines a constant representing  the last_login
 
 *  field used to store last user log in
 
 */
 
define('USER_LAST_LOGIN', 'last_login');
 
 
/**
 
 *  Defines a constant for identifying administrators role vale
 
 *  Note: Framework need to known the value you want use for identifying
 
 *  administrators role. So it can automatically assign
 
 *  administration rights
 
 */
 
define('ADMIN_ROLE_ID', 100);
 
 
/*
 
 Below is an example to create the MySQL table previously defined:
 
 
    -- Tables:
 
 
    DROP TABLE IF EXISTS `access_level`;
 
    CREATE TABLE IF NOT EXISTS `access_level` (
 
      `id_access_level` int(11) NOT NULL,
 
      `name` varchar(45) NOT NULL
 
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Access levels';
 
 
    DROP TABLE IF EXISTS `user`;
 
    CREATE TABLE IF NOT EXISTS `user` (
 
      `id_user` int(11) NOT NULL,
 
      `id_access_level` int(11) NOT NULL,
 
      `full_name` varchar(45) NOT NULL,
 
      `email` varchar(100) NOT NULL,
 
      `password` varchar(200) NOT NULL,
 
      `salt` varchar(256) NOT NULL,
 
      `enabled` int(11) NOT NULL DEFAULT '1'
 
    ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='Users credentials';
 
 
    -- Simple data. WARNING: All users password are = 'password`:
 
 
    INSERT INTO `access_level` (`id_access_level`, `name`) VALUES
 
    (50, 'user'),
 
    (60, 'manager'),
 
    (100, 'admin');
 
 
    INSERT INTO `user` (`id_user`, `id_access_level`, `full_name`, `email`, `password`, `salt`, `enabled`) VALUES
 
    (1, 100, 'The admin, '[email protected]', 'c0c7e179876ffce487a8f0494795d310782afd5f639beb897f3fe74b5d493136e1958c4d82b06003a0f1c4f92b0b2bd38be6709ada6d9892e415df11a4b25a78', '7944735265b159264b47d83.57046201', 1),
 
    (2, 60, 'Manager', '[email protected]', '035432d6f1a769b653123a24d3273494fc2b79bf525a481020dc7c446cdfec2af5c42669b8ec77d1796f5df0e29ab502b63600cb15bb110e385699d21ccd2de8', '21120102305b159287d7fee8.43527519', 1),
 
    (3, 50, 'User', '[email protected]', 'a1b6028feed6dadcff553d2336ee34bf96545ccb357ba46b3a4fbb758b990f2be4dad006aa2f187b37e414343f6aa06feeff178b77f19ba087c5f41be1b9e550', '202125205b1592980029f9.55802183', 1);
 
 
    -- Indexes, primary and foreign key , limits:
 
 
    ALTER TABLE `access_level`
 
     ADD PRIMARY KEY (`id_access_level`);
 
 
    ALTER TABLE `user`
 
     ADD PRIMARY KEY (`id_user`), ADD UNIQUE KEY `unique_email` (`email`), ADD KEY `fk_user_access_level_idx` (`id_access_level`), ADD KEY `idx_full_name` (`full_name`);
 
 
    ALTER TABLE `user`
 
    ADD CONSTRAINT `fk_user_access_level1` FOREIGN KEY (`id_access_level`) REFERENCES `access_level` (`id_access_level`) ON DELETE NO ACTION ON UPDATE NO ACTION;
 
 
    ALTER TABLE `user`
 
    MODIFY `id_user` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;
 
 
 */
 
 
 
 
/**
 
 * Defines the constants for Cookie Chiper
 
 */
 
 
/**
 
 *  Defines a constant for setting cryptography algo used by Chiper.
 
 *  Value must be one of the following:
 
 *      md5
 
 *      sha1
 
 *      sha256
 
 *      sha384
 
 *      sha512
 
 */
 
define('CRYPT_ALGO', 'sha512');
 
 
/**
 
 *  System Chiper SALT
 
 *  Used for Cookies. It is also the default used for password
 
 *  when no user salt was defined
 
 */
 
define('CHIPER_CREDENTIALS_COOKIE_SALT','8454fBh9c%=%bg3766GTDg7FD');
 
 
/**
 
 *  Chiper credentials cookie expiration c (2592000 secs = 30 days)
 
 */
 
define('CHIPER_CREDENTIALS_COOKIE_EXPIRATION_DATE',2592000);
 
 
/**
 
 *  Slides credentials cookie expiration date if true
 
 */
 
define('CHIPER_CREDENTIALS_COOKIE_SLIDING_EXPIRATION',true);
 
 
/**
 
 *  Credentials cookie name
 
 */
 
define('CHIPER_CREDENTIALS_COOKIE_NAME', 'AppCredentials');
 
 
/*
 
 *  Constant for login warning message of common/Login controller when
 
 *  user is not logged in and page requires authentication.
 
 *  Note: It appears when is set the $_GET["login_warning_message"] and is
 
 *  automatically translated by the Locale engine by using Login controller
 
 *  translation file
 
 */
 
define("LoginAuthWarningMessage", "{RES:LoginAuthWarningMessage}");
 
 
/*
 
 *  Constant for login warning message of common/Login controller
 
 *  when page requires authentication, user is logged but his
 
 *  role is not granted.
 
 *  Note: It appears when is set the $_GET["login_warning_message"] and is
 
 *  automatically translated by the Locale engine by using Login controller
 
 *  translation file
 
 */
 
define("LoginRBACWarningMessage", "{RES:LoginRBACWarningMessage}");
 
 
/**
 
 * Securing PHP session and cookies
 
 */
 
// session.entropy_file = "/dev/urandom" (better entropy source)
 
ini_set('session.use_strict_mode', 1);
 
ini_set('session.use_cookies', 1);
 
ini_set('session.use_only_cookies', 1);
 
ini_set('session.cookie_httponly', 1);
 
ini_set('session.cookie_lifetime ', 0);
 
ini_set('session.cookie_secure', isset($_SERVER["HTTPS"]));
 
ini_set('session.name','WEBMVCFramework');
 
 
/**
 
 * Securing XSS
 
 * Specifies if automatically securing output data against XSS
 
 */
 
define("XSS_PROTECTION", true);
 
 
/**
 
 *  Specifies XSS protection by using external HTMLPURIFIER library
 
 */
 
define("USE_HTMLPURIFIER", false);
 
 
if (XSS_PROTECTION) {
 
    if (USE_HTMLPURIFIER) {
 
        require_once(RELATIVE_PATH . 'framework/htmlpurifier/HTMLPurifier.auto.php');
 
    }
 
}
 
 
/**
 
 * Securing forms
 
 * Specifies csrftoken token fields for Record Component
 
 */
 
 
define("CSRF_TOKEN_FORM_FIELD", "csrftoken");
 
 
 
/**
 
 * Securing file access.
 
 * Specifies a path, outside HTTP access, where framework and application classes
 
 * could be located. In this way, you can protect directory access from HTTP.
 
 * Note: if it's value is null all framework files and classes must be located
 
 * inside the same application directory (anythings is potentially accessible from HTTP).
 
 *
 
 * Setting example:
 
 *
 
 *    define ("SECURING_OUTSIDE_HTTP_FOLDER","C:/Wamp/Apache2.2/mvcout_framework/");
 
 *
 
 * If you set SECURING_OUTSIDE_HTTP_FOLDER you also must set RELATIVE_PATH inside
 
 * index.php
 
 *
 
 * For example:
 
 *
 
 *    define ("RELATIVE_PATH", "C:/Wamp/Apache2.2/mvcout_framework/");
 
 *
 
 *
 
 *
 
 * WARNING: When using SECURING_OUTSIDE_HTTP_FOLDER you must to separate files and
 
 * directors in this way;
 
 *
 
 * PATH NOT ACCESSIBLE FROM HTTP                PATH ACCESSIBLE FROM HTTP
 
 * =============================                =========================
 
 * classes                                      css
 
 * config                                       js
 
 * framework                                    framework/js
 
 * controllers                                  util (only if you want to run builders)
 
 * models                                       temp (a temporary folder)
 
 * views                                        index.php
 
 * templates                                    .htaccess
 
 * locales
 
 *
 
 */
 
define ("SECURING_OUTSIDE_HTTP_FOLDER","");
 
 
 |