保护Joomla SQL连接

时间:2015-10-12 19:18:46

标签: php mysql mysqli joomla sql-injection

我在论坛上使用此代码“check repeated ip”:

<?php 

    $db = JFactory::getDBO();

    $pid = $forum['Post']['topic_id'];

    $ipaddress = $forum['User']['ipaddress'];

    $query = 'SELECT count(ipaddress) FROM #__forum_comments WHERE ipaddress = "' . $ipaddress . '" AND pid = ' . (int) $pid;

    $count_ip = $db->setQuery($query)->loadResult();

    if($count_ip >= 2){
    echo 'Your ip repeated';
    }

?>

我问过编写此代码的开发人员关于SQL注入的保护,这就是他们所说的:

  

原生的Joomla方法是JFactory::getDBO(),这是正确的方法。您可以尝试使用escape方法查看是否有效:$ipaddress = $db->escape($forum['User']['ipaddress']);无需转义$pid,因为将其转换为整数就足够了。实际上,由于这两个值都直接来自数据库,因此可以非常安全地假设即使没有转义也不会有任何类型的mysql注入。

我需要做这样的事吗?

//escaping to prevent sql injection
$pid = mysqli_real_escape_string($mysqli, $review['Review']['listing_id']);
$ipaddress = mysqli_real_escape_string($mysqli, $review['User']['ipaddress']);

1 个答案:

答案 0 :(得分:0)

你应该这样做:

$jinput = JFactory::getApplication()->input;
$pid = $jinput->get('pid', '', 'integer');
$ip =  $jinput->get('ip', '', 'string');

然后你可以运行你的查询。