request_param, выходящий из шаблонов Smarty - PullRequest
1 голос
/ 31 октября 2011

У меня есть простой поисковый скрипт, который возвращает результаты на основе строки запроса из URL:

$filter_query = request_param('query');
if ($filter_query) {
  $topic_filters['query'] = $filter_query;
  $smarty->assign('query', $filter_query);
}

Однако в настоящее время это подвергается XSS и злоупотреблению, поскольку не очищает ввод 'query'.

Я использую шаблоны Smarty, есть ли встроенные функции, которые делают это автоматически?

Ответы [ 2 ]

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

Внутри вашего шаблона Smarty используйте модификатор escape , чтобы избежать вывода от атак XSS.По умолчанию это экранирует & " ' < >.Если вам нужно закодировать дополнительные объекты, используйте параметр :htmlall для модификатора escape.( см. Документацию )

{* Inside your template... *}
This is the value of {$query|escape}

В противном случае вы можете избежать этого, прежде чем назначить Smarty с помощью htmlspecialchars()

// Or beforehand in PHP, which protects you from forgetting to do it in your template
// if you use the same variable in many locations.
$smarty->assign('query', htmlspecialchars($filter_query));
0 голосов
/ 17 октября 2012

У меня была похожая проблема: код

onmouseover="action({$keyid},'{$label}');"

вызывало ошибки JavaScript, когда $ label содержал кавычки. Я решил использовать команду Smarty escape: 'quotes'. Обратите внимание, что в этом случае | один только escape не решился бы, потому что вместо замены 'на \' он бы заменил 'на & # 039;

Поэтому я отредактировал свой код так:

onmouseover="action({$keyid},'{$label|escape:'quotes'}');"

и это работает! Надеюсь, это кому-нибудь пригодится ...

...