может это дело вкуса, но я делаю проверку на допустимые значения меньше шанс что-нибудь упустить PHP: <?php if (abs((int)$_GET['id']) != '') { //работаем } else header('тра-ля-ля 404 .и.т.д.'); ?>
угу. Уели. А теперь покажите мне здесь хоть одного "спрашивающего совета", который будет писать скрипты для этих систем? Для кого, собственно говоря, мы и рассуждаем, как лучше делать.
shurastik if (abs((int)$_GET['id']) != '') { abs - это число по модулю. int - это целое число. Если число не целое возращает 0. Так что либо abs либо int.
RomanBush Поисковые системы это лишь пример. Поверь, есть корпоративные сайты, которым все равно, какое место они занимают в рейтинге. Главное что бы был сайт, давать клиентам. Сам делал таким (советы я тоже спрашиваю, т.к считаю себя новичком). Адреса тоже могу подкинуть, но что это даст?
По сути ничем от закрытого не отличается. Нормальные сайты должны следовать стандартам, в том числе HTTP.
Clone Иди это заказчику скажи Vladson Смотря что считать нормальным. Данная ситуация: if ((int) $_GET['page'] < 1) $page = 1; - является нормальной. Тут уже упирается на вкус и цвет. Что не правильного в данном подходе? Про оптимизацию сайта не надо.
Elkaz не пойму зачем strlen, если есть уже (int)? если предполагается число проверять на лимит кол-ва цифр, то не лучше ли это делать до (int)? А теперь по теме. Злоумышленник которого стоит опасаться, если не выдать ему страницу ошибки и так поймет что используют значения по дефолту, так как явно изменяет посылаемые значения, а значит ждет реакции на не стандартную ситуацию, в этом случае мы ничиго не выигруем перед злоумышлеником выдавая страничку об ошибке, (без детальной информации а ориетрированную на ботов) или подставляя значения по умолчанию. Но наоборот на основе того что у нас есть по умолчанию он может делать выводы о логике вот чота так я думаю ) Я за ошибки ориент. на поисковых ботов, для простого пользователя "глюк" с посылаемыми данными думаю минимален(если вообще не стремится к нулю), покрайней мере если этот пользователь нормально работает, и через нормальный браузер А польза от оптимизации для поисковиков всетаки важна Вообще так подумать, жену например зовут Маша, а ты кричишь ей Оля, и она видя что Оли тут нет, думает что нада откликнутся Нормально будет если она скажет "Дурень, я Маша" (Ошибка! Оли тут нет!)
1 - Два адреса одной страницы (10 и -10) 2 - открой ка мне страничку с ID=7395739845739374950377456356374573543646345346 Оптимизация не причём (она лишь побочный эффект) смысл в работе скрипта (в том что он должен работать, а не просто "запускатсья")
Vladson 1. -10 неправильный запрос для переменной page. Следовательно берем его дефолтное значение - 1. 2. strlen 3. Согласен. AlexGousev +1. Просто я считаю, что выставление страницы ошибки сервера на злонамеренное действие пользователя вместо принятия какого-то дефолтного значения - это уже дело вкуса
Elkaz Да именно можно вроде бы как свое что-то придумать, но вот выше Vladson говорил о ситуации, когда кто-то где-то укажет не правильную ссылку на твой сайт и она будет проиндексирована как будто все нормально. Хотя с другой стороны все равно траффик Наверное стоит "кричать" на явное "нападение" при неверных данных НЕ GET запроса, если же это GET, то выдавать ошибку с сообщением типа "Возможно вы имели ввиду: тут ссылка на то что было бы при подстановке значений по умолчанию" и далее Location через refresh. Ну а на НЕ GET можно смело сказать "Не фиг нас ломать". Думаю нормальный пользователь с нормальным браузером в такую ситуацию просто не попадет
Ruzzz Пусть индексируется как нормально Не. Одно дело $_GET['page'] = '-19083432423'; и другое дело $_GET['page'] = 15; // но в базе, к примеру, такого не существует. Для такого надо выдавать уже сообщение о том, что такой ID не существует, вернитесь назад и попробуйте снова Хз. Я весь REQUEST фильтрую...
А если у меня столько записей в базе ? (на этом форуме тоже когда-то было 30 сообщений на всех, а сейчас у тебя одного далеко за 300)
Elkaz, ну зачем лишнюю работу проделывать? Выдай ошибку - ибо нефиг. И ещё - подумай, зачем тебе одинаковый контент на разных страницах?
(int)$_GET['id'] - целое число может быть отрицательным, ведь так? Для этого и abs. а сообщения об ошибках, ИМХО - дело личное.
Как вы относитесь к проверке данных через ereg? Код (Text): $str = $_GET["str"]; if (ereg ("1-9", $str)) { } else { $str = "1"; }
Ambrella Для числовых значений тяжеловато будет (не принято так делать) (вообще лучше юзать preg так как он считается пошустрее)
По моему вы просто загоняетесь, на мой взгляд вырубать сценарии лишння трата времени - хакера это никак не остановит. Просто убираем из переменной все не нужны символы. Если во время работы происходит ошибка, просто выдаем её цифровой номер(или как вам уогдно её определить) и пускай хакер думает, что за ошибка 32. Еще можно перед каждой функцией поставить @. Сайт на мой взгляд должен работать стабильно, какую бы дрянь не пихали в get, post запросы. [/quote]