Проблема передачи строк с постом PHP - PullRequest
0 голосов
/ 05 мая 2010

В основном я занимаюсь разработкой (очень) простой поисковой системы. Вы можете ввести критерий поиска, и вы попадете на страницу результатов - что отлично работает. Однако на странице результатов у меня есть кнопка, которая приведет вас к следующим 10 результатам: где $ term - значение $ _POST ['term'].

echo "<input type='hidden' name='term' value='" . $term . "'>";

Это вызывает следующую проблему с термином, например "aidan's".

При нажатии следующих 10 кнопок термин становится помощником \, и дальнейших результатов не найдено.

Я ничего не делаю в срок.

Я обычно использую Java, но для этого универа я должен использовать PHP!

Любая помощь будет принята с благодарностью.

Ответы [ 7 ]

1 голос
/ 05 мая 2010

Это может быть ваш PHP, который ускользает от ваших данных, проверьте http://www.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc и / или http://php.net/manual/en/function.addslashes.php, это должно помочь вам определить проблему

0 голосов
/ 05 мая 2010
  1. Всегда используйте метод GET для поиска, а не POST.
  2. Либо отключите магические кавычки, либо удалите косую черту вручную
  3. Используйте htmllspecialchars с параметром ENT_QUOTES для кодирования значения поля формы.
  4. Подумайте, чтобы распечатать HTML как есть, не используя PHP echo, чтобы избавиться от всего этого безумного цитата
  5. Самая важная часть . Если вы указали свой термин для поиска в базе данных, не используйте в форме переменную в кавычках.

так

if (isset($_GET['term'])) {
  if (get_magic_quotes_gpc()) $_GET['term'] = stripslashes($_GET['term']);
  //$term=mysql_real_escape_string($_GET['term']);
  //perform search here. 
  //
  $term = htmlspecialchars($_GET['term'],ENT_QUOTES); //from $_GET again
  ?>
  <input type="hidden" name="term" value="<?php echo $term?>">
  <?
}
0 голосов
/ 05 мая 2010

Функция, которую вы ищете: htmlspecialchars(). Однако, чтобы заставить его работать, вы должны использовать кавычки для переноса параметра.

Кроме того, при наличии косых черт может потребоваться функция stripslashes().

Итак:

$term = htmlspecialchars( stripslashes( $term ) );

echo '<input type="text" name="term" value="' . $term . '" >';
0 голосов
/ 05 мая 2010

Я думаю, что самый простой способ - не помещать $ term как скрытое поле вообще. Для нумерации страниц вы можете сохранить память искомого термина в сеансе.

0 голосов
/ 05 мая 2010

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

echo "<input type='hidden' name='term' value='" . htmlspecialchars($term) . "'>";

Как только вы это сделаете, вам больше не понадобятся неясные аддлаши / кавычки / что-либо еще.

Чтобы сделать это проще во всем коде, определите

function h($s) {  htmlspecialchars($s); }

echo "<input type='hidden' name='term' value='" . h($term) . "'>";
0 голосов
/ 05 мая 2010

Если вы используете двойные кавычки, вам не нужно разрывать строку при использовании переменной. Вы также можете использовать различные опции, такие как уже упомянутые или htmlentities() или urlencode(). Я бы использовал позже, просто потому что. Таким образом, вы бы в конечном итоге:

$term = urlencode($term);
echo "<input type='hidden' name='term' value=\"$term\">";
0 голосов
/ 05 мая 2010

Попробуйте позаботиться о addlashes () и stripslashes () http://php.net/manual/en/function.addslashes.php

Что касается вашей проблемы, я думаю, вы должны попытаться добавить что-то вроде этого:

$search = stripslashes($_POST['term']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...