2014-01-13 4 views
0

Я создал изображение в php-файле и написал над ним текст. Я не использую пользовательский ввод, но я получаю доступ к моей базе данных. Обычно файлы Joomla начинаются сРазрешить прямой доступ к файлу в Joomla без нарушений безопасности

defined('_JEXEC') or die('Restricted access'); 

, но я хочу/поэтому я не могу использовать эту строку. В этом примере мой сайт по-прежнему будет в безопасности?

Все огорожена

try { 
$pdo = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $stmt = $pdo->prepare("SELECT * FROM newData"); 
     $stmt->execute(); 
     $result = $stmt->fetchAll(PDO::FETCH_NUM); 
     foreach($result as $row) { 
      pseudo code...grab image, make a string with data from the query and write 
         on top of image 
     } 
     show image. 
} catch(PDOException $e) { 
      file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND); 
     } 

Или, Что безопаснее/лучше для достижения тех же результатов.

+2

Разрешение прямого доступа к файлу не является угрозой безопасности и само по себе. Все дело в том, что делает этот сценарий и что он обращается к нему, что создает угрозу безопасности. Это не создаст угрозы безопасности, но вы потеряете все преимущества использования Joomla (основные классы и т. Д.), Поэтому это не рекомендуется. –

+0

API Joomla фактически включает в себя тип документа изображения (так что вы можете сделать view.image.php). Это может стоить изучить. – Elin

ответ

3

Почему бы не использовать Joomla Standard при использовании внешних файлов/скриптов.

Вышеуказанный метод не подходит для стандартов безопасности или стандартов mysql (вам необходимо установить данные БД на несколько мест, это плохая идея).

Мое предложение состоит в том, чтобы использовать фреймворк Joomla внутри ваших внешних скриптов.

define('_JEXEC', 1); 
define('JPATH_BASE', dirname(__FILE__));//this is when we are in the root,means path to Joomla installation 
define('DS', DIRECTORY_SEPARATOR); 

require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 

$mainframe =& JFactory::getApplication('site'); 
$mainframe->initialise(); 
$db = JFactory::getDBO(); 
$sql ="your query"; 
$db->setQuery($sql); 
$db->query(); 
$result = $db->loadAssocList();//for multi rows, for single rows loadAssoc() 

Надежда его помогает ..

Смежные вопросы