Вопрос № 116539: Здравствуйте!
Помогите с получением и кодированием url текущей страницы. ( С прошлого года мучаюсь. ).
Есть у меня форма на некой страничке. Форма как положено
<form action='...' method='post'>
И вот мне нужно в это ac...
Вопрос № 116.539
Здравствуйте!
Помогите с получением и кодированием url текущей страницы. ( С прошлого года мучаюсь. ).
Есть у меня форма на некой страничке. Форма как положено
<form action='...' method='post'>
И вот мне нужно в это actioн прописать имя страницы, с адресом и текущими параметрами. Тут-то и начинаются проблемы!
$action = urlencode(substr($_SERVER["REQUEST_URI"], 1));
Путь сохраняется, но теряются параметры. Если же без кодирования,
$action = substr($_SERVER["REQUEST_URI"], 1);
то легко можно взломать, введя всякую чуш в адресную строчку.
Незнаю, где-то в настройках моего php включена опция и делается экранирование, опасных символов. По этому вреда особого не получается пречинить, но страницу можно испаганить адресом:
index.php?str='>this%20is%20hack.<!
Но эта опция вродебы может быть отключена, и тогда получится огромная дыра.
Подскажите, что можно сделать. Не перебирать же мне все параметры страницы!
Я могу заменить угловые скобки на соответствующие коды, но может ещё, что нужно заменять?
Повторюсь, адреса страницы с формой я не знаю, поскольку функция рисует формы на разных страницах. Списка параметров у меня тоже нет.
Про значение по умолчанию атрибута action я тоже знаю, но мне оно нужно в явном виде.
Отвечает: Griffon
Здравствуйте, Талипов А Н!
Выполняете все необходимые подготовки URL
Далее... например
$url = 'http://username:password@hostname/path?aa=1&bb=2&id=231";
тогда
$myquery = parse_url($url));
$myquery = $myquery['query'];
Либо получить строку запросов можно через глобальную переменную $_SERVER.
$myquery = $_SERVER['QUERY_STRING'];
Далее используя foreach($output as $i => $value) вы можете добавить к форме скрытый элемент с необходимыми параметрами.
Ответ отправил: Griffon (статус: 1-ый класс)
Ответ отправлен: 01.01.2008, 16:01 Оценка за ответ: 4 Комментарий оценки: Не то.Идейка о разборе параметров таким образом излишня, их можно спокойно прочитать в массиве $_GET. Я там на минифоруме скинул примерный скрипт(сейчас мой рабочий вариант на него похож принципом), это работает именно как мне нужно. Ваш ответ сподвиг меня для написания этих четырёх строк кода, за что и благодарю.
Отвечает: Миленин Александр
Здравствуйте, Талипов А Н!
1) Вы можете вообще не указывать action, тогда форма будет отправляться в текущую страницу со всеми параметрами.
2) Если вы используете mysql, можите экранировать опасные символы функцией string mysql_escape_string ( string unescaped_string). В сочитанинии с htmlspecialchars() будут заэкранированы все опасные символы.
3) Если вы не пользуетесь mysql или не можите воспользоваться mysql_escape_string, воспользуйтесь htmlspecialchars(), а затем удалите из строки символы " ' " и " ` ".
P.S. "Кодирование" URL с помощью urlencode() не прибавляет вашим скриптам безопасности. На самом деле вы ничего не можите сдалать на стороне клиента, чтобы обезопасить ваши скрипты, вам необходимо создавать скрипты, которые будут корректно реагировать на любой бред, получаемый извне.
Ответ отправил: Миленин Александр (статус: 9-ый класс)
Ответ отправлен: 01.01.2008, 18:15 Оценка за ответ: 3 Комментарий оценки: Мысли всё дельные, и я с вами согласен,только вот далеко от моего вопроса. Речь ведь именно о защите. Причем здесь обработка на стороне клиента не знаю.