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攻击,但是作为一个网站系统管理员,下面是一些很好的建议:
- 当你登录系统后台的时候,不要浏览其他的网站
- 请记住点击后台的logout按钮来退出。关闭浏览器并不代表你已经退出登录了
- 如果你不在需要操作后台,请及时登出
- 当你浏览网站的时候,请确保他是你想要浏览的网站。