2010-10-18 1 views
3

У меня самая странная проблема с codeigniter. У меня есть сайт, на котором есть функция поиска, которая отображает запрос человека в URL-адресе, чтобы он мог сохранить URL-адрес. Я убеждаюсь, что текст запроса прошел через rawurlencode, прежде чем я вставлю его в URL-адрес. Однако Codeigniter по-прежнему приводит меня к странице с ошибкой, когда в запросе есть символ, который не находится в моей конфигурации allowed_uri_characters.Codeigniter «ловит» URL-адреса, даже если они были urlencoded

Так что, хотя в моем браузере говорится/search-results/query /% 22samplequery% 22, я по-прежнему получаю ошибку об использовании недопустимых символов.

Это ошибка? У меня нет недопустимых символов в моем URL-адресе. У меня есть знак% и некоторые номера (которые все специально разрешены). Это определенно параметр allowed_uri_characters, который дает мне печаль. Если я добавлю к нему котировочную метку, это позволяет без проблем выполнить запрос% 22.

И чтобы быть ясным, запрос поступает из формы в виде пост-данных, затем кодируется в моем контроллере и затем перенаправляется на новую страницу. Нет никакого способа, чтобы разрешенные_оригиналы каким-то образом применялись до того, как они закодированы.

Это заставляет меня баттироваться, так как единственным моим решением на данный момент является открытие моих разрешенных_риконов для всего, что под солнцем, что не очень безопасно!

+0

Holy godddamn ... Я ненавижу Codeigniter прямо сейчас из-за этой проблемы. Неужели ты не повезло найти ответ? – MikeMurko

ответ

0

Может быть URL, кодирующие% 20 к "перед CodeIgniter проверить» это? Как насчет того, добавив, что в список разрешенной Чары.

+0

Ну, цифры и знаки% разрешены, и я уже знаю, что могу заставить его работать, если я добавлю кавычку в список разрешенных символов. Моя проблема заключается в том, что я НЕ ХОЧУ добавить метку кавычек в список разрешенных символов, потому что мне не нужно, и я стараюсь, чтобы безопасность была максимально плотной. – neomech

0

У меня есть свое собственное решение для этого, это грязно и не является оптимальными, но он работает. Вы можете создать таблицу, в которой вы храните (search_string, url_title).

Каждый раз, когда вы выполняете поиск, сохраните строку, сгенерируйте url_title() и сохраните ее в базе данных. Таким образом, вы можете перенаправить ваш пользователь к безопасному URL-адресу, не пропуская начального поиска.

Я знаю, что кто-то будет кричать на меня за это решение. если ваш сайт небольшой, а ваш трафик остается низким, это действительное решение.

1

Похоже, что вам нужно добавить @ в разрешенные_украины, даже если вы указали электронное письмо по электронной почте перед отправкой на сайт site_url(). Возможно, это урдекод перед просмотром символов ... Percent Symbol in CodeIgniter URI

Это сообщение, более конкретное для вашей проблемы. http://sholsinger.com/archive/2009/04/passing-email-addresses-in-urls-with-codeigniter/

Я пробовал с разрешенными_ришами и, наконец, передал электронное письмо как строку запроса ([email protected]), даже не urlencoding. Отлично работает :)

 Смежные вопросы

  • Нет связанных вопросов^_^