Надежно перехватить закодированную строку URL для поиска?

У меня в основном есть форма поиска с вводом:

<input type="text" name="search" />

Это в конечном итоге отправляет пользователя на:

/search/[URL_ENCODED_STRING]

Так что, если они искали

http://www.stackoverflow.com/

URL будет:

/search/http%253A%252F%252Fwww.stackoverflow.com%252F

Моя проблема состоит в том, чтобы знать, безопасен ли ввод, который я затем прочитал позже. Затем я бы на странице поиска использовал присущие Drupal способы чтения значения (arg (1)). Но даже без друпала результат был бы таким же. Я бы закончил с:

$variable = urldecode($input);

Если я распечатаю переменную $, она покажет:

http://www.stackoverflow.com/

Мой вопрос заключается в том, какую очистку я должен применить к этой строке, прежде чем использовать ее в SQL? Это просто «аддлэш»? Или я должен удалить все не буквенно-цифровые и числовые значения?

НОТА

Я еще не дошел до этой части, но я вполне уверен, что Drupal будет применять свою собственную дезинфекцию, если я передам эту переменную во встроенную функцию поиска, но я все еще хотел бы знать, как правильно дезинфицировать эту ввод, чтобы злоумышленники не делали странные вещи на сайте.

ОБНОВИТЬ

Я добрался до части, и Drupal действительно заботится о подготовленной части заявления. Но я до сих пор не знаю, как бы очистить строку при ее печати здесь:

<div id="searchedFor">
<span class="preLabel">You searched for</span>
<h2><?php print $_REQUEST['search']; ?></h2>
</div>

Как правильно распечатать это?

0

Решение

Чтобы продезинфицировать страницу, используйте htmlentities() или же strip_tags() или же htmlspecialchars():

<div id="searchedFor">
<span class="preLabel">You searched for</span>
<h2><?php echo htmlentities($_REQUEST['search'], ENT_QUOTES); ?></h2>
</div>

Пример:

<?php echo htmlentities("<script>NastyJS('code');</script>", ENT_QUOTES); ?>
<!-- Shows in browser this way -->
<script>NastyJS('code');</script>
<!-- but shows in source this way -->
&lt;script&gt;NastyJS(&#039;code&#039;);&lt;/script&gt;
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]