<?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","");
|