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的字符串