关于安全:
- WEB安全在现在的WEB应用中越来越体现他自身的重要性。
- InitPHP框架提供了一套WEB安全基础的实现方式。
全局Filter机制:
- InitPHP框架内置了fliter()函数对$_GET、$_PSOT、$_COOKIE、$_SERVICE等容易被攻击的全局变量进行了过滤
- fliter()函数在框架运行的时候会自动加载执行
- Filter安全类:
core/controller/filter.init.php
/**
* 安全过滤类-全局变量过滤
* 在Controller初始化的时候已经运行过该变量,对全局变量进行处理
* Controller中使用方法:$this->controller->fliter()
* @return
*/
public function fliter() {
if (is_array($_SERVER)) {
foreach ($_SERVER as $k => $v) {
if (isset($_SERVER[$k])) {
$_SERVER[$k] = str_replace(array('<','>','"',"'",'%3C','%3E','%22','%27','%3c','%3e'), '', $v);
}
}
}
unset($_ENV, $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_COOKIE_VARS, $HTTP_SERVER_VARS, $HTTP_ENV_VARS);
self::fliter_slashes($_GET);
self::fliter_slashes($_POST);
self::fliter_slashes($_COOKIE);
self::fliter_slashes($_FILES);
self::fliter_slashes($_REQUEST);
}
/* 运行的时候执行 */
/**
* 初始化控制器,
*/
public function __construct() {
$this->fliter();
$this->set_token(); //生成全局TOKEN值,防止CRsf攻击
}
丰富的过滤函数:
- InitPHP框架提供了丰富的数据过滤函数
- 过滤类:
core/controller/filter.init.php
/* 一部分类 */
/**
* 安全过滤类-加反斜杠,放置SQL注入
* Controller中使用方法:$this->controller->fliter_slashes(&$value)
* @param string $value 需要过滤的值
* @return string
*/
public static function fliter_slashes(&$value) {
if (get_magic_quotes_gpc()) return false; //开启魔术变量
$value = (array) $value;
foreach ($value as $key => $val) {
if (is_array($val)) {
self::fliter_slashes($value[$key]);
} else {
$value[$key] = addslashes($val);
}
}
}
/**
* 安全过滤类-过滤javascript,css,iframes,object等不安全参数 过滤级别高
* Controller中使用方法:$this->controller->fliter_script($value)
* @param string $value 需要过滤的值
* @return string
*/
public function fliter_script($value) {
$value = preg_replace("/(javascript:)?on(click|load|key|mouse|error|abort|move|unload|change|dblclick|move|reset|resize|submit)/i","&111n\\2",$value);
$value = preg_replace("/