htmlspecialchars - должен быть лучший способ - PullRequest
0 голосов
/ 19 октября 2011

Насколько я понимаю, все переменные должны выводиться через htmlspecialchars () в представлении.

Существуют ли какие-либо подходы или методы для этого без указания функции в каждой соответствующей строке в каждом представлении?

Лучшее, что я могу придумать, это иметь вспомогательную функцию следующим образом: функция html_escape ($ var)

function h($var)
{
  if (is_array($var))
  {
    return array_map('h', $var);
  }
  else
  {
    return htmlspecialchars($var, ENT_QUOTES, 'UTF8');
  }
}

Но все же ... это может стать очень утомительным!

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 19 октября 2011

У вас может быть функция h(), которая выводит экранированные данные, а не возвращает их.Поэтому вместо написания <?php echo h($myvar); ?> вы можете написать <?php h($myvar); ?>.Теперь это на два символа короче, чем отображение переменной без преобразования в сущности.

1 голос
/ 19 октября 2011

Важно отметить, что не все переменные должны проходить через htmlentities / htmlspecialchars, только те, которые в любом случае содержат предоставленный пользователем контент, который еще не отфильтрован по набору правил для предотвращения включение произвольного кода.

Вы могли бы создать вспомогательную функцию, чтобы немного сократить ввод текста, или зациклить весь введенный пользователем ввод через htmlentities / htmlspecialchars в ваших контроллерах, прежде чем передавать их на просмотр (хотя это, вероятно, будет менее эффективным, поскольку маловероятно, что будет отображаться каждый фрагмент пользовательского ввода)

0 голосов
/ 19 октября 2011

То, что у вас есть, вероятно, наиболее близко к легкому спасению в большинстве ситуаций.

Лично я использую небольшой цикл для своих переменных, если я знаю, что буду использовать любые $_GET переменные в своем выводе html, я запускаю это:

<?php
foreach($_GET as $key => $value) {
  $_GET[$key] = htmlspecialchars($value);
}
?>

Затем запустите мои html-теги сразу после.

Хотя не все нужно избегать, если только пользователь не имеет на это никакого влияния.

Кроме того, у вас может быть скрипт под названием escape.php, который использует вышеуказанный метод для общих переменных, которые вы используете, таких как $ _GET, $ _POST, $ _COOKIE и т. Д., А затем include('escape.php') его в ваших скриптах перед использованием в выводе html.

Все зависит от вашего вкуса и того, что вам нужно для вашего проекта.

...