В этом случае, когда вы имеете дело с ненадежным каналом без контроля, у вас есть ограниченные возможности для обеспечения безопасности.
Два, которые приходят на ум, это:
- используйте что-то вроде
striptags()
, чтобы убрать все форматирование содержимого RSS-канала.
- используйте библиотеку, подобную
HTMLPurifier
, для проверки и очистки содержимого перед выводом.
Для повышения производительности следует кэшировать готовый к выводу контент, к вашему сведению.
-
Относительно кэширования
Есть много способов сделать это ... Если вы используете фреймворк, скорее всего, у него уже есть способ сделать это. Zend_Cache - это класс, предоставляемый платформой Zend, например.
Если у вас есть доступ к memcached, то это очень просто. Но если нет, то есть много других способов.
Общая концепция заключается в том, чтобы подготовить вывод, а затем сохранить его, готовый к выводу много раз. Таким образом, вы не несете затрат на извлечение и подготовку выходных данных, если они просто будут одинаковыми каждый раз.
Рассмотрим этот код, который будет только загружать и форматировать RSS-канал каждые 5 минут ... Все остальные запросы - быстрая команда readfile()
.
# When called, will prepare the cache
function GenCache1()
{
//Get RSS feed
//Parse it
//Purify it
//Format your output
file_put_contents('/tmp/cache1', $output);
}
# Check to see if the file is available
if(! file_exists('/tmp/cache1'))
{
GenCache1();
}
else
{
# If the file is older than 5 minues (300 seconds), then regen
$a = stat('/tmp/cache1');
if($a['mtime'] + 300 < time())
GenCache1();
}
# Now, simply use this code to output
readfile('/tmp/cache1');