打印本页
%21 %514 %2014 %19:%十 %PM

Joomla CSRF解决方案

作者
给本项目评分
(0 得票数)

本节将讨论joomla 框架是如何避免CSRF跨站请求伪造。以及对joomla后台管理员提供一些比较好的安全方面的建议。

Joomla跨站请求伪造


对于一个具有CSRF漏洞的joomla网站,黑客可以通过简单的代码就让你的网站产生一种破坏。一个简单实例就是在不信任的网站上发布如下的代码:

<html>
<body>
<img src="http://some/joomla/site/administrator/index2.php?option=com_users&task=delete...">
</body>
</html>

如果你是一个超级管理员, 如果你的用户组件存在CSRF漏洞,如果你在没有退出登录的时候打开了这个网页,那么很遗憾,你的网站将有灭顶之灾。

Joomla解决方案


 

当然,各位试用joomla的站长大可以放心,joomla的用户组件没有CSRF漏洞。joomla的解决方法是在你的每一个请求后面都会加上一个token(令牌环),这个token是一个随机字符串,通过对token的验证就可以阻止CSRF攻击了。

POST请求

为了避免CSRF攻击,我们需要在表单中加上下面的代码:

<?php echo JHtml::_( 'form.token' ); ?>

这段代码将在你的表单中增一个隐藏的字段

<input type="hidden" name="1234567890abcdef1234567890abcdef" value="1" />

GET请求

GET请求通过在你的查询字符串中增加token。代码如下:

<?php 
echo JRoute::_( 'index.php?option=com_example&controller=object1&task=save&'. JSession::getFormToken() .'=1' ); 
?>

检查Token

一旦你在你的表单或者查询字符串中增加了token.那么你应该在你的脚本执行之前先进行检查。代码如下:

JSession::checkToken() or die( 'Invalid Token' );

如果是查询字符串,那么应该如下:

JSession::checkToken( 'get' ) or die( 'Invalid Token' );

推荐的安全措施


尽管上面的方法能够帮助我们避免一些CSRF攻击,但是作为一个网站系统管理员,下面是一些很好的建议:

  1. 当你登录系统后台的时候,不要浏览其他的网站
  2. 请记住点击后台的logout按钮来退出。关闭浏览器并不代表你已经退出登录了
  3. 如果你不在需要操作后台,请及时登出
  4. 当你浏览网站的时候,请确保他是你想要浏览的网站。
阅读 11791 次数