joomla 防CSRF攻击
在正常的展示页面,我们是不需要做处理的,因为任何人都可以访问。
我们需要处理的地方主要有两个部分,第一个是提交表单,另外一个是Ajax请求操作。
提交表单
如果使用POST提交,在Joomla中只需要在表单的页面增加一行代码
<?php echo JHtml::_( 'form.token' ); ?>
这段代码会在表单中增加一个的token.如何审查元素,可以看到如下的代码:
<input type="hidden" name="1234567890abcdef1234567890abcdef" value="1" />
当提交表单后,我们需要在后台增加一个校验,以检查token是否匹配。
检验token的方法也非常的简单
JSession::checkToken() or die( 'Invalid Token' );//在这个之后写逻辑代码
如果是GET提交表单,你需要在链接中增加如下的代码:
<?php echo JRoute::_( 'index.php?option=com_example&controller=object1&task=save&'. JSession::getFormToken() .'=1' ); // JSession::getFormToken() .'=1' 是我们增加的token ?>
针对于GET提交表单,后端的校验代码需要修改如下:
JSession::checkToken( 'get' ) or die( 'Invalid Token' );
如果使用Ajax提交表单,或者做一些数据操作,也是可以增加token的;
首先需要在页面中添加如下代码:
JHtml::_('jquery.token');
这个代码会在提交Ajax请求的时候自动将token设置在请求的参数中。主要的代码片段如下:
$(function(){ $.ajaxSetup({ headers: { 'X-CSRF-Token': $('meta[name="{$name}"]').attr('content') } }); }
上面的代码Joomla 就是 JHtml::_('jquery.token'); 产生的。
在服务端检查token的方法如下:
//校验CSRF if(!JSession::checkToken()) { die("Invalid_TOKEN"); }
Joomla中 JSession::checkToken() 用法:
JSession::checkToken('get');//适应get提交 JSession::checkToken('post');//适应post提交 JSession::checkToken('request');//适应所有提交 JSession::checkToken();//与request作用一样,适应所有提交
声明 本人博客的所有东西,部分源于网络书籍和视频,其他的是个人的理解感悟,经过自己整理撰写成博客。 本人博客均只用于个人学习、复习,不作为商业用途,如有侵权,请联系我修改或删除。 联系邮箱:15121014713@163.com