本文源于阅读阅读InitPHP框架源码时的总结,先多谢InitPHP的开源。
互联网火热,开发迭代快速,但是不能忽略了网络安全,特别是涉及个人信息和在线交易的一些平台。
信息安全无非是涉及两个端口的安全:一个是信息的入口安全(需要对输入系统的数据先进行一下过滤处理,避免一些不安全的数据录入到数据库,造成数据库数据的损坏)。二个是输出过滤。(对输出的变量进行过滤,避免不需要的,影响安全的脚本被输出到页面上去。)
在InitPHP 框架中,作者从以下几方面做了保护信息安全的工作。可以说涵盖了一个框架对安全问题的所有关注。非常值得学习,这里做一下摘录。
1.全局Filter机制。
内置了fliter()函数对$_GET、$_PSOT、$_COOKIE、$_SERVICE等容易被攻击的全局变量进行了过滤,框架执行时自动加载,对所有入口变量进行过滤。
2.提供丰富的过滤函数。
内部提供了过滤javascript,css,iframes,object等不安全参数的函数。
3.统一获取GET POST数据,并进行默认的过滤。
使用get_gp函数默认会过滤数据。
4.CSRF风险控制。
内置了公用的TOKEN机制,在框架运行的时候就能生成用户的唯一TOKEN,用户每次打开浏览器访问网站的TOKEN都是不同的。
5.XSS风险控制。
XSS防范主要是输出过滤。将输出到模板上的PHP变量都进行HTML过滤。
6.SQL安全问题防范。
提供了一整套SQL安全机制:sql_build和常用DB操作函数,一般的DB操作都可以使用我们提供的方法来实现。
----------------------------------------------------------------分隔线--------------------------------------------------------------------------------------------
1.全局Filter机制。
InitPHP框架内置了fliter()函数对$_GET、$_PSOT、$_COOKIE、$_SERVICE等容易被攻击的全局变量进行了过滤
fliter()函数在框架运行的时候会自动加载执行
代码:
/** * 安全过滤类-全局变量过滤 * 在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攻击 }