HatoL
Профессор
- Регистрация
- 5 Фев 2008
- Сообщения
- 206
- Реакции
- 36
- Автор темы
- #1
Собственно вопрос, как нужно фильтровать данные, переданные методом GET ? У меня в сценарии пользователь должен передавать только одну переменную, которая будет использоваться в трех случаях:
1) Отображаться в заголовке страницы (т.е. между тегами <title> и </title>)
2) Отображаться на самой странице
3) По значению переданного параметра будет происходить выборка данных из MySQL
Теперь конкретные вопросы:
1) Правильно, что в 1-ом и во 2-ом случае достаточно только удалить символы < и > ? Ведь остальные символы не могут повлиять на содержимое...
2) Что фильтровать в третьем случае ? Данные у меня могут содержать достаточно большое количество специальных символов (вот моя регулярка: [^0-9a-zA-Z_~!@^()-[{]}|.] (все спец. символы я заменил на шестнадцатиричные последовательности вида \x1F, здесь выложил так, чтобы проще разобрать было)). Если нету четкого ответа на этот вопрос, то тогда хотелось бы узнать все служебные символы в MySQL и как их заменить, чтобы они не воспринимались как служебные.
Извиняюсь, что создал кучу разных тем, просто так получилось, что сейчас начал писать свои первые скрипты (раньше только писал мелкие вещи а-ля линейный вывод данных). Тогда задам сразу еще несколько вопросов:
1) Почему, когда передаешь одинарную (') или двойную (") кавычку, то браузер отображает ее как \' или \" ? Причем когда фильтруешь ее регуляркой, слэш остается.
2) Читал в одной книге, что если передавать все данные в SQL-запросе в кавычках (т.е. вместо WHERE $id = 1 передавать WHERE $id = '1'), то взлом осуществить сложнее и впринципе с этим сложно не согласиться, т.к. таким образом мы защищаемся от передачи служебных символов SQL, т.к. они будут заключены в кавычках и воспримуться как обычные символы. Но как такое осуществить в PHP ? Преобразованием типов ?
1) Отображаться в заголовке страницы (т.е. между тегами <title> и </title>)
2) Отображаться на самой странице
3) По значению переданного параметра будет происходить выборка данных из MySQL
Теперь конкретные вопросы:
1) Правильно, что в 1-ом и во 2-ом случае достаточно только удалить символы < и > ? Ведь остальные символы не могут повлиять на содержимое...
2) Что фильтровать в третьем случае ? Данные у меня могут содержать достаточно большое количество специальных символов (вот моя регулярка: [^0-9a-zA-Z_~!@^()-[{]}|.] (все спец. символы я заменил на шестнадцатиричные последовательности вида \x1F, здесь выложил так, чтобы проще разобрать было)). Если нету четкого ответа на этот вопрос, то тогда хотелось бы узнать все служебные символы в MySQL и как их заменить, чтобы они не воспринимались как служебные.
Извиняюсь, что создал кучу разных тем, просто так получилось, что сейчас начал писать свои первые скрипты (раньше только писал мелкие вещи а-ля линейный вывод данных). Тогда задам сразу еще несколько вопросов:
1) Почему, когда передаешь одинарную (') или двойную (") кавычку, то браузер отображает ее как \' или \" ? Причем когда фильтруешь ее регуляркой, слэш остается.
2) Читал в одной книге, что если передавать все данные в SQL-запросе в кавычках (т.е. вместо WHERE $id = 1 передавать WHERE $id = '1'), то взлом осуществить сложнее и впринципе с этим сложно не согласиться, т.к. таким образом мы защищаемся от передачи служебных символов SQL, т.к. они будут заключены в кавычках и воспримуться как обычные символы. Но как такое осуществить в PHP ? Преобразованием типов ?