Joomla!-开源天空

2009-01-10
您所在的位置: 首页 > Joomla专栏 > 源代码分析 > 开发安全的Joomla组件,插件和模块(四) 防止SQL注射

开发安全的Joomla组件,插件和模块(四) 防止SQL注射

Joomla! 开源天空  作者:joomla  2008-01-12 14:45
  • 摘要:如何防止sql注射,从而开发安全的Joomla组件

SQL注射是攻击者能够修改查询语句,当脚本执行的石虎,将敏感信息暴露给攻击者。这主要是源于没有验证用户输入。    

我们来看下面的代码

Joomla 1.0

$value = $_GET['value'];
 $database->setQuery( "SELECT * FROM #__mytable WHERE id = $value" );

攻击者可以输入一个语句 例如‘1 OR 1’,那么实际的语句变为:

"SELECT * FROM #__mytable WHERE id = 1 OR 1", 返回了jos_mytable的所有数据.


结论: 要验证处理用户输入的说有数据

Joomla 1.0

$string = $database->getEscaped( $string );
Joomla 1.5

$string = $db->getEscaped( $string );


Joomla 1.0

$value = intval( $value );
Joomla 1.5

$value = intval( $value );

关于sql注射的更多内容,请参见附件 [3.2].

Jooml 1.0请使用mosGetParam取得数据

Joomla 1.0

$value = mosGetParam( $_POST, 'value' );
 $value = mosGetParam( $_POST, 'value', 'default' ); // This will return 'default'
       // when $_POST['value'] is not set.
Joomla 1.5请使用 JRequest::getvar()

Joomla 1.5

$value  = JRequest::getVar( 'value', '', 'post', string );
$value  = JRequest::getVar( 'value', 'default', 'post', string );


以上的方法都返回escaped的字符串

  • 相关文章

  发表您的文章评论

您的姓名 (昵称)
标题:
评分: 很差一般较好很好
评论:
验证码:
请输入验证码