PHP и Smarty защита с stripslashes

110
17 августа 2018, 11:10

Есть MySQL код:

CREATE TABLE IF NOT EXISTS `system_news` (
  `id_news` int(11) NOT NULL,
  `name` tinytext NOT NULL,
  `body` text NOT NULL,
  `putdate` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY (`id_news`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

и есть такой PHP код index.php:

<?php
include("include/config.php");
include("include/functions/import.php");
$query="SELECT id_news, name, body, DATE_FORMAT(putdate,'%d.%m.%Y') as putdate_format FROM system_news ORDER BY putdate DESC LIMIT 5";
$executequery = $conn->Execute($query);
if($executequery->recordcount()>0)
    $news = $executequery->getrows();
STemplate::assign('news',$news);
//TEMPLATES BEGIN
STemplate::display('header.tpl');
STemplate::display('index.tpl');
STemplate::display('footer.tpl');
//TEMPLATES END
?>

и еще такой шаблон index.tpl:

<table width="100%" 
       border="0" 
       cellspacing="0" 
       cellpadding="0" 
       height="100%">
    {section name=i loop=$news}
    <tr>
        <td style="text-align: justify;" ><div style="padding: 0; margin-bottom: 5px;"><span><strong>{$news[i].putdate_format}</strong> {$news[i].name} <a href="{$baseurl}/novini/{$news[i].id_news}.html">Детальнее...</a>
        </span></div></td>
    </tr>
    {/section}
</table> 

Вопрос по безопасности скрипта, надо ли где-либо вставлять SMARTY stripslashes в index.tpl или что-то подобное чтоб защитится от некоректного MySQL запроса?

Answer 1

Вопрос по безопасности скрипта, надо ли где-либо вставлять SMARTY stripslashes в index.tpl или что-то подобное чтоб защитится от некоректного MySQL запроса?

как вам уже в целом ответили в комментариях. Ваш SQL код не принимает никакие параметры, так что о какой-либо защите тут говорить смысла не имеет. С другой стороны, если бы параметры и были, то заниматься их обработкой должен не smarty, а основной пхп-код (т.е. смарти тут вообще не при делах, его задача - вывод html).

В дополнение несколько замечаний:

  1. Используйте нативные для пхп средства подключения к БД - PDO или Mysqli.
  2. Форматирование даты - это вопрос дизайна, задача верстальщика и решаться должна в представлении. Так что убирайте свой date_format из SQL запроса.
  3. Вывод хэдера и футера проще организовать через {include} в основном шаблоне, а не рендерить несколько шаблонов подряд. С помощью include вы сможете предетать дополнительные настройки в подключаемые шаблоны, и изменить их на разных страницах. Впрочем опять это задача представления.
  4. писать {$news[i].name} в шаблоне это весьма топорно

В целом ваш index.tpl лучше привести к виду

{include "header.tpl"}
<table width="100%" height="100%"
       border="0" 
       cellspacing="0"  cellpadding="0">
  {foreach $news as $n}   
  <tr>
    <td style="text-align: justify;" >
       <div style="padding: 0; margin-bottom: 5px;">
          <span>
            <strong>{$n.putdate|date_format:"%d.%m.%Y"}</strong> 
            {$n.name}
            <a href="{$baseurl}/novini/{$n.id_news}.html">Подробнее&hellip;</a>
          </span>
        </div>
     </td>
  </tr>
  {/foreach}    
</table> 
{include "footer.tpl"}
READ ALSO
PHP POST 404 NOT FOUND mail.php

PHP POST 404 NOT FOUND mail.php

У меня в корне проекта лежитphp файл для формы

183
PHP: как сгруппировать массив по ключу?

PHP: как сгруппировать массив по ключу?

Подскажите, как можно сгруппировать массив в PHP:

149
Почему не работает цикл PHP?

Почему не работает цикл PHP?

Имеется следующий PHP код, цикл не хочет запускаться по какой-то причине, описанной в ошибкеPHP говорит, что нужно поставить запятую или точку...

130
Сохранение многие ко многим laravel

Сохранение многие ко многим laravel

У меня имеется три собой таблицы:

145