CakePHP的安全性
安全性是构建Web应用程序的另一个重要特征。它确保了网站用户数据的安全。 CakePHP提供了一些工具,以确保您的应用程序安全。
加密和解密
CakePHP的安全类库提供加密和解密数据的方法。以下两种方法分别用于加密解密数据。
static CakeUtilitySecurity::encrypt($text, $key, $hmacSalt = null) static CakeUtilitySecurity::decrypt($cipher, $key, $hmacSalt = null)
加密方法将文本和键作为参数来加密数据,返回HMAC校验值。
hash()方法用来散列数据。以下是hash()方法的语法。
语法
static CakeUtilitySecurity::hash($string, $type = NULL, $salt = false)
CSRF
CSRF代表跨站请求伪造 。通过启用CSRF组件,就可以得到反攻击保护。 CSRF是Web应用程序的常见漏洞。它允许攻击者捕获和重放前一个请求,在其他域使用图像标记或资源提交数据请求。CSRF只需通过简单的添加CsrfComponent至组件阵列即可启用。
public function initialize(){ parent::initialize(); $this->loadComponent('Csrf'); }
该CsrfComponent与表单助手无缝集成。每次通过表单助手创建表单的时候,它都会插入包含CSRF安全令的隐藏域。
虽然不建议这样做,你可能要在某些请求中禁用CsrfComponent。您可以通过使用控制器的事件调度程序在beforeFilter()方法运行的过程中这样做。
public function beforeFilter(Event $event){ $this->eventManager()->off($this->Csrf); }
安全组件
安全组件适用于安全要求更严格的应用程序。它为各类任务提供方法,如:-
限制您的应用程序接受的http方法 。在反作用发生之前,您应该总是检查HTTP方法。您应该检查HTTP方法或使用Cake\Network\Request::allowMethod()以确保使用正确的HTTP方法。
表单篡改保护 -默认情况下,SecurityComponent阻止用户以特定的方式篡改表单。SecurityComponent将阻止以下事件 -
未知域不能被添加到表单。
字段不能从表单中删除。
隐藏域的值不能被修改。
要求使用SSL -所有动作要求SSL加密。
限制跨控制器的通信 -我们可以限制哪些控制器可将请求发送到此控制器。我们也可以限制哪些方法可以发送请求到此控制器的方法。
例
修改config/routes.php文件如下。
config/routes.php文件
<?php use CakeCorePlugin; use CakeRoutingRouteBuilder; use CakeRoutingRouter; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('login',['controller'=>'Logins','action'=>'index']); $routes->fallbacks('DashedRoute'); }); Plugin::routes();
在src/Controller/目录下创建一个LoginsController.php文件。复制以下代码至其中。
src/Controller/LoginsController.php
<?php namespace AppController; use AppControllerAppController; class LoginsController extends AppController{ public function initialize(){ parent::initialize(); $this->loadComponent('Security'); } public function index(){ } } ?>
在src/Template目录下创建一个Logins目录,并在该Logins目录下创建一个名为index.ctp的视图文件。复制以下代码至其中。
src/Template/Logins/index.ctp
<?php echo $this->Form->create("Logins",array('url'=>'/login')); echo $this->Form->input('username'); echo $this->Form->input('password'); echo $this->Form->button('Submit'); echo $this->Form->end(); ?>
通过访问以下网址执行上面的例子- http://localhost:85/CakePHP/login
输出
执行以上程序,您会看到如下页面:
更多建议: