function getTables()
 {
     $tables = array();
     $data = array();
     $data[] = array('<b>' . JText::_('URL') . '</b>', $this->_logRecord->url);
     if ($this->_logRecord->ip) {
         $ipBlocked = JD_Block_Helper::isIPBlocked($this->_logRecord->ip);
         $src = $ipBlocked ? JURI::base() . 'components/com_jdefender/images/locked.gif' : JURI::base() . 'components/com_jdefender/images/unlocked.gif';
         $img = JHTML::image($src, JText::_('Block/Unblock user'), array('id' => 'user_ip_img', 'onclick' => 'toggleLockImage(); xajax_jdBlockParam(\'user_ip_img\', \'ip\', \'' . $this->_logRecord->ip . '\')', 'title' => JText::_('Block/Unblock IP'), 'class' => 'hasTip', 'style' => 'cursor: pointer'));
         $data[] = array('<b>' . JText::_('IP Address') . '</b>', $img . ' ' . $this->_logRecord->ip);
     }
     if ($this->_logRecord->user_id) {
         $user =& JFactory::getUser($this->_logRecord->user_id);
         $isUserBlocked = JD_Block_Helper::isUserBlocked($user->get('id'));
         $src = $isUserBlocked ? JURI::base() . 'components/com_jdefender/images/locked.gif' : JURI::base() . 'components/com_jdefender/images/unlocked.gif';
         $img = JHTML::image($src, JText::_('Block/Unblock user'), array('id' => 'user_img_' . $user->get('id'), 'onclick' => 'toggleLockImage(); xajax_jdBlockParam(\'user_img_' . $user->get('id') . '\', \'user\',' . $user->get('id') . ')', 'title' => JText::_('Block/Unblock user'), 'class' => 'hasTip', 'style' => 'cursor: pointer'));
         $userId = $img . ' ' . $user->get('id');
         $data[] = array('<b>' . JText::_('User ID') . '</b>', $userId);
         $data[] = array('<b>' . JText::_('Username') . '</b>', $user->get('username'));
         $data[] = array('<b>' . JText::_('Name') . '</b>', $user->get('name'));
         $data[] = array('<b>' . JText::_('Email') . '</b>', JHTML::_('email.cloak', $user->get('email')));
     }
     // unset($this->_logRecord->status);
     unset($this->_logRecord->url);
     $tables[] = $data;
     return $tables;
 }
 /**
  * Blocks/unblocks file execution
  * @param boolean $block Block / Unblock
  */
 function block($block = true)
 {
     require_once JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_jdefender' . DS . 'helpers' . DS . 'block.php';
     list($files, $ids) = $this->_getFilesAndIds($this->_blocks);
     $fixedFiles = array();
     $fixedIds = array();
     foreach ($files as $key => $file) {
         if (!is_file($file) || JFile::getExt($file) != 'php') {
             continue;
         }
         $id = false;
         if (strpos($key, ':') !== false) {
             $tmp = explode(':', $key);
             $id = (int) $tmp[1];
         }
         if ($block) {
             $result = JD_Block_Helper::blockPHP($file);
         } else {
             $result = JD_Block_Helper::unblockPHP($file);
         }
         if ($result !== true) {
             $this->setError($result);
             continue;
         }
         $fixedFiles[] = $file;
         if ($id) {
             $fixedIds[] = $id;
         }
     }
     $cFiles = 0;
     $cIds = 0;
     if (count($fixedFiles)) {
         $cFiles = parent::refreshFilesystemTable($fixedFiles);
     }
     if (count($fixedIds)) {
         $cIds = parent::setLogStatus($fixedIds, $block ? 'blocked' : 'unblocked');
     }
     $this->_blocks = array();
     return max($cFiles, $cIds);
 }
 /**
  * Blocks IP Address
  * @override
  * @param $blockReason
  * @param $block
  */
 function block($blockReason, $block = true)
 {
     if (empty($this->_blocks) && !count($this->_blocks)) {
         return false;
     }
     require_once JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_jdefender' . DS . 'helpers' . DS . 'block.php';
     $ids = array();
     foreach ($this->_blocks as $k => $item) {
         if (is_numeric($item)) {
             $ids[] = $item;
         }
     }
     $logModel =& JModel::getInstance('Log', 'JDefenderModel');
     $logModel->setState('id', $ids);
     $records = $logModel->getData();
     if (empty($records)) {
         $records = array();
     }
     // Make rules
     foreach ($records as $rec) {
         $ip = $rec->ip;
         $type = 'ip';
         if ($block) {
             JD_Block_Helper::block($type, $ip, $blockReason);
         } else {
             JD_Block_Helper::unblock($type, $ip);
         }
     }
     $this->_blocks = array();
     if ($block) {
         parent::setLogStatus($ids, 'blocked');
     } else {
         parent::setLogStatus($ids, 'unblocked');
     }
     return true;
 }
예제 #4
0
파일: log.php 프로젝트: alphashuro/audeprac
 function deleteBlockedIpLogs($logTypes = false)
 {
     $where = array();
     $where[] = 'block.`type` = "ip"';
     if ($logTypes) {
         settype($logTypes, 'array');
         foreach ($logTypes as $k => $v) {
             $logTypes[$k] = $this->_db->Quote($v);
         }
         $where[] = 'logs.`type` IN (' . implode(', ', $logTypes) . ') AND block.`published` = 1 ';
     }
     $where = ' WHERE ' . implode(' AND ', $where);
     $q = 'DELETE logs.* FROM #__jdefender_log logs ' . 'INNER JOIN #__jdefender_block_list block ON logs.ip = block.value ' . $where;
     $this->_db->setQuery($q);
     if (!$this->_db->query()) {
         return false;
     }
     $deletedCount = $this->_db->getAffectedRows();
     // Deletes logs generated for blocked IP Ranges
     $ranges =& JD_Block_Helper::getRangedIpBlocks();
     $ipWhere = array();
     if ($ranges && is_array($ranges)) {
         foreach ($ranges as $r) {
             $t = explode('-', $r);
             if (count($t) != 2) {
                 continue;
             }
             $t[0] = JString::trim($t[0]);
             $t[1] = JString::trim($t[1]);
             $lower = ip2long($t[0]);
             $upper = ip2long($t[1]);
             if ($lower == -1 || $lower === false || $upper == -1 || $upper == false) {
                 continue;
             }
             if ($lower > $upper) {
                 $temp = $t[0];
                 $t[0] = $t[1];
                 $t[1] = $temp;
             }
             $ipWhere[] = 'INET_ATON(`ip`) BETWEEN INET_ATON(' . $this->_db->Quote($t[0]) . ') AND INET_ATON(' . $this->_db->Quote($t[1]) . ')';
         }
     }
     $where = array();
     if ($logTypes) {
         $where[] = '`type` IN (' . implode(', ', $logTypes) . ') ';
     }
     if (count($ipWhere)) {
         $where[] = ' ( ' . implode(' OR ', $ipWhere) . ' ) ';
         if (count($where)) {
             $where = 'WHERE ' . implode(' AND ', $where);
         } else {
             $where = '';
         }
         $q = 'DELETE FROM #__jdefender_log ' . $where;
         $this->_db->setQuery($q);
         if (!$this->_db->query()) {
             return false;
         }
         $deletedCount += $this->_db->getAffectedRows();
     }
     return $deletedCount;
 }
예제 #5
0
 function display($tpl = null)
 {
     global $mainframe, $option;
     $uri =& JFactory::getURI();
     $document =& JFactory::getDocument();
     $document->addStyleSheet(JURI::root() . 'administrator/components/com_jdefender/css/toolbar.css');
     if (JRequest::getString('layout') == 'log_groups') {
         return $this->showLogGroups();
     }
     if (JRequest::getString('layout') == 'options') {
         return $this->showOptions();
     }
     if (JRequest::getString('layout') == 'report') {
         return $this->reportDeveloper();
     }
     JToolBarHelper::title(JText::_('Detailed log'), 'log');
     JToolBarHelper::unpublishList('ignore', JText::_('Ignore'));
     JToolBarHelper::deleteList();
     // -------
     $type = JRequest::getVar('cid');
     $type = $type[0];
     // Set title for specific log group
     if ($type) {
         $dummy = new stdClass();
         $dummy->type = $type;
         $this->_decorateLogGroup($dummy);
         JToolBarHelper::title(JText::_('Detailed log') . ' - ' . JText::_($dummy->title), 'log');
     }
     $filter_order = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.filter_order', 'filter_order', 'ctime');
     $filter_order_Dir = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.filter_order_Dir', 'filter_order_Dir', '');
     $limitstart = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.limitstart', 'limitstart', '0');
     $limit = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.limit', 'limit', '15');
     $state = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.filter_state', 'filter_state', '');
     $search = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.filter_search', 'filter_search', '');
     $extension = $mainframe->getUserStateFromRequest($option . '.' . $type . '.log.filter_extension', 'filter_extension', '');
     $lists['order_Dir'] = $filter_order_Dir;
     $lists['order'] = $filter_order;
     $lists['limitstart'] = $filter_order_Dir;
     $lists['limit'] = $filter_order;
     $lists['state'] = $state;
     $lists['search'] = JString::strtolower($search);
     $lists['extension'] = JString::strtolower($extension);
     $model =& JModel::getInstance('Log', 'JDefenderModel');
     $model->setState('type', $type);
     $model->setState('filter_order', $filter_order);
     $model->setState('filter_order_Dir', $filter_order_Dir);
     if ($limit) {
         $model->setState('limit', $limit);
         $model->setState('limitstart', $limitstart);
     }
     $model->setState('filter_state', $state);
     $model->setState('filter_search', $search);
     $model->setState('filter_extension', $extension);
     $states = $model->getStatusesForType($type);
     if ($state) {
         // Unset the state if it not exists
         $stateExists = false;
         foreach ($states as $s) {
             if ($s->status == $state) {
                 $stateExists = true;
                 break;
             }
         }
         if (!$stateExists) {
             $model->setState('filter_state', null);
             $state = null;
         }
     }
     $items =& $model->getData();
     $total =& $model->getTotal();
     $pagination =& $model->getPagination();
     // toolbar
     $somethingToReport = true;
     if ($extension) {
         $model->_state = new JObject();
         $model->setState('filter_extension', $extension);
         $model->setState('type', $type);
         $model->setState('filter_state', array('bad_functions', 'insecure'));
         $somethingToReport = $model->getTotal();
     }
     $toolbarHelper =& ME_Defender_Options_Toolbar_Helper::getInstance();
     if ($somethingToReport) {
         $toolbarHelper->makeButtons($type, $extension);
     } else {
         $toolbarHelper->makeButtons($type);
     }
     // override the toolbar.
     $nativeToolbar =& JToolBar::getInstance();
     $nativeToolbar = $toolbarHelper->getToolbar();
     if (!$total) {
         JError::raiseNotice('DEF_NO_LOGS', JText::_('Logs are empty'));
     }
     // Prepare the items
     for ($i = 0, $c = count($items); $i < $c; $i++) {
         $this->_decorateLogGroup($items[$i]);
         $this->_decorateLogRecord($items[$i]);
         $truncated = false;
         if ($items[$i]->ip) {
             // truncate the string
             $items[$i]->url = $items[$i]->ip . ' - ' . $items[$i]->url;
             if (JString::strlen($items[$i]->url) > 80) {
                 $items[$i]->url = JString::substr($items[$i]->url, 0, 80);
                 $truncated = true;
             }
         }
         $items[$i]->source = JHTML::link('index.php?option=com_jdefender&tmpl=component&task=showOptions&id=' . $items[$i]->id, $items[$i]->url, array('rel' => '{handler: \'iframe\', size: {x: 800, y: 600}}', 'class' => 'modal'));
         if ($truncated) {
             $items[$i]->source .= ' ... ' . JText::_('Truncated');
         }
         if (!$items[$i]->blocked_ip) {
             $items[$i]->blocked_ip = JD_Block_Helper::isIPBlocked($items[$i]->ip, true);
         }
         $items[$i]->ctime = JD_Log_Helper::formatDate($items[$i]->ctime);
     }
     $logGroups =& $model->getLogGroups();
     if (empty($logGroups)) {
         $logGroups = array();
     }
     $uri =& JURI::getInstance();
     $url = $uri->toString();
     $options = array();
     $options[] = JHTML::_('select.option', '', '- ' . JText::_('Change log section') . ' -');
     // Preformat the log groups
     for ($i = 0, $c = count($logGroups); $i < $c; $i++) {
         // The controls for log groups
         $logGroups[$i]->id = $logGroups[$i]->type;
         $logGroups[$i]->editLink = 'index.php?option=com_jdefender&controller=log&task=showLog&cid[]=' . $logGroups[$i]->type;
         $this->_decorateLogGroup($logGroups[$i]);
         $options[] = JHTML::_('select.option', $logGroups[$i]->type, $logGroups[$i]->title);
     }
     $lists['quickjump'] = JHTML::_('select.genericlist', $options, 'quickjump', array('onchange' => 'window.location.href=\'index.php?option=com_jdefender&controller=log&task=showLog&cid[]=\' + this.value'));
     $options = array();
     $options[] = JHTML::_('select.option', '', '- ' . JText::_('Select status') . ' -');
     foreach ($states as $k => $v) {
         $options[] = JHTML::_('select.option', $v->status, JString::ucfirst(str_replace('_', ' ', $v->status)));
     }
     $lists['state'] = JHTML::_('select.genericlist', $options, 'filter_state', array('class' => 'inputbox', 'onchange' => 'submitform();'), 'value', 'text', $state);
     $loggedExtensions = $model->getLoggedExtensions();
     $options = array();
     $options[] = JHTML::_('select.option', '', '- ' . JText::_('Select extension') . ' -');
     foreach ($loggedExtensions as $l) {
         $v = $l->extension;
         if (empty($v)) {
             continue;
         }
         $ext = explode('::', $v);
         if (count($ext) != 3) {
             continue;
         }
         /// type and extension must be set.
         if (empty($ext[0]) || empty($ext[2])) {
             continue;
         }
         $name = JString::ucwords(JText::_($ext[0])) . ': ' . JText::_($ext[2]);
         if ($ext[1]) {
             $name .= ' ' . JText::_('Group') . ': ' . $ext[1];
         }
         $options[] = JHTML::_('select.option', $v, $name);
     }
     $lists['extension'] = JHTML::_('select.genericlist', $options, 'filter_extension', array('class' => 'inputbox', 'onchange' => 'submitform();'), 'value', 'text', $extension);
     $types = JRequest::getVar('types', array());
     if (in_array($type, array('blocked_users_ips', 'php_injection', 'sql_injection'))) {
         $this->assign('showTotal', true);
     } else {
         $this->assign('showTotal', false);
     }
     $this->assignRef('lists', $lists);
     $this->assignRef('items', $items);
     $this->assignRef('total', $total);
     $this->assignRef('pagination', $pagination);
     $this->assignRef('request_url', $uri->toString());
     $this->assignRef('types', $types);
     $this->assignRef('logType', $type);
     JHTML::_('behavior.modal');
     JHTML::_('behavior.tooltip');
     JD_Admin_Menu_Helper::decorate();
     parent::display($tpl);
 }
예제 #6
0
 /**
  * Check whether IP is blocked
  * @param $ip
  * @param $checkRangesOnly
  * @param $refresh
  */
 function isIPBlocked($ip, $checkRangesOnly = false, $refresh = false)
 {
     static $ipStatus = array();
     $ip = trim($ip);
     if (!isset($ipStatus[$ip][(int) (!!$checkRangesOnly)]) || $refresh) {
         $db =& JFactory::getDBO();
         $result = false;
         if (!$checkRangesOnly) {
             $db->setQuery('SELECT COUNT(*) FROM #__jdefender_block_list WHERE `type` = "ip" AND `value` = ' . $db->Quote($ip) . ' AND published = 1');
             $result = $db->loadResult();
             if ($result > 0) {
                 $ipStatus[$ip][(int) (!!$checkRangesOnly)] = true;
                 return true;
             }
         }
         $ip2long = ip2long($ip);
         $IPRanges =& JD_Block_Helper::getRangedIpBlocks();
         if ($IPRanges) {
             foreach ($IPRanges as $entry) {
                 $range = explode('-', $entry);
                 if (count($range) != 2) {
                     continue;
                 }
                 $lower = ip2long(trim($range[0]));
                 $upper = ip2long(trim($range[1]));
                 if ($lower == -1 || $lower === false || $upper == -1 || $upper == false) {
                     continue;
                 }
                 if ($lower <= $ip2long && $ip2long <= $upper || $lower >= $ip2long && $ip2long >= $upper) {
                     $ipStatus[$ip][(int) (!!$checkRangesOnly)] = true;
                     return true;
                 }
             }
         }
         $ipStatus[$ip][(int) (!!$checkRangesOnly)] = false;
     }
     return $ipStatus[$ip][(int) (!!$checkRangesOnly)];
 }