我在论坛上使用此代码“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']);
答案 0 :(得分:0)
你应该这样做:
$jinput = JFactory::getApplication()->input;
$pid = $jinput->get('pid', '', 'integer');
$ip = $jinput->get('ip', '', 'string');
然后你可以运行你的查询。