【问题标题】:Protect Joomla SQL connection保护 Joomla SQL 连接
【发布时间】:2016-01-10 09:01:22
【问题描述】:

我在我的论坛上使用此代码“检查重复的 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(),这是正确的方法。您可以尝试使用转义方法来查看是否有效:$ipaddress = $db-&gt;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']);

【问题讨论】:

    标签: php mysql mysqli joomla sql-injection


    【解决方案1】:

    你应该这样做:

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-17
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多