Обнаружение жестко закодированного текста метки в приложении PHP - PullRequest
2 голосов
/ 22 марта 2012

Есть ли способ обнаружить жестко закодированный текст метки, который потенциально может быть заменен меткой в ​​приложении PHP? Я говорю не только о файлах PHP, но и о JavaScript, XML-файлах и шаблонах SMARTY / TWIG. Существуют ли стандартные процедуры в многоязычных приложениях?

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Для PHP вы можете перебирать файлы шаблона, используя token_get_all().

Вы бы посмотрели на T_STRING токены, а затем проверили, не совпадают ли они с вашими заполнителями. Например: «Все прописные» или что-то в этом роде.


Для xml это почти то же самое: перебирать узлы и проверять, летит ли текстовое содержимое там, где вы ожидаете только заполнители.

0 голосов
/ 26 марта 2012

Наша поисковая система - это инструмент для эффективного поиска по большим базам кода, индексирующий лексическую структуру языка для ускорения поиска.Таким образом, он быстрее, чем grep, и допускает гораздо больше нюансов запросов с точки зрения этих языковых лексем.

Запрос представляет собой серию лексем с различными ограничениями.Можно написать запрос:

   I=*foo* '.' S=*hello

, означающий: «найти Идентификатор, содержащий« foo », за которым следует оператор конкатенации, за которым следует литеральная строка с буквами« привет »в конце. Для PHPуниверсальная лексема S представляет все литералы строкового типа (строки в кавычках, строки в кавычках, heredocs и т. д .; вы можете искать их специально, если хотите). Поскольку поисковая система понимает лексический синтаксис, она не будет сбита с толку, используя пробелы, разрывы строк или комментарии, поэтому вам не нужно знать макет, чтобы найти его (если вы настаиваете, он найдет токены комментариев с ограничениями).

Не нужно устанавливать ограничение:

   I=*foo* '.' S

находит любую комбинацию точечных строк идентификатора.

Запрос

   S

сам по себе напрямую отвечает на вопрос ОП «где находятся буквенные строки?» Любого типа.

...