solnikolay

Рейтинг
56
Регистрация
13.07.2007
joost:
Это хорошо для поисковика? (робота)
если есть парамерты типа type.php?code=142 или detal.php?query=samsung+x820
стоит ли использовать мод_реврайт?

Лучше пользовать. Для основных поисковиков значения не имеет, а вот для второстепенных - имеет.

Например, Webalta не ест параметры :(

Да, это хорошо для поисковика.

ЗЫ: подписывались чтоли бы в отзывах.

YugForum:
А что такое прямые ссылки??? Я так думаю, что следующий вопрос видемо этот - логично?

Может всеже прочесть ФАК? ;)

be@ver:
есть примерно такой код
<div clas="gen">

<div id="menu">тут собственно много строчек</div>
<div id="quot">тут немного текста</div>
тут собственно текст страницы,
очень много текста,
символов 100 :D</div>
</div>

есть таблица стилей

#menu { float:right;}
#quot { float:left;}

задача стоит в том, что бы верхний край дива с цитатой был ниже нижнего края дива с меню (о как завернул :) ), ну и соответственно весь остальной текст это дело плавно обтекал

Имхо, никак :)

Либо div с цитатой ниже нижнего края И остальной текст идет еще ниже.

Либо не страдаем фигней и делаем через position: absolute :)

Использование глобальных переменных (Register_Globals)

Наверное, наиболее спорным моментом в разработке PHP стала замена значения по умолчанию для опции register_globals с ON на OFF в версии 4.2.0. Большинство пользователей доверились разработчикам, даже не зная, что это за опция и как она влияет на работу PHP. Эта страница документации призвана показать, как эта настройка сочетается с вопросами безопасности при разработке приложений. Следует понимать, что сама по себе эта опция никак не влияет на безопасность, ургозу представляет некорректное использование предоставляемых ею возможностей.

В случае, если значение параметра register_globals ON, перед выполнением вашего кода будут инициализированы различные переменные, например, переменные, переданные при отправке формы. Также, учитывая тот факт, что PHP не требует инициализации переменных, написать потенциально опасный код очень легко. Это было очень спорным решением, но общество разработчиков PHP решило изменить значение по умолчанию этой директивы на OFF. В противном случае при написании кода разработчики не могли бы с уверенностью сказать, откуда пришла та или иная переменная и насколько она достоверна. До такого нововведения переменные, определяемые разработчиком внутри скрипта, и передаваемые пользователем внешние данные могли перемешиваться. Приведем простой пример злоупотребления конфигурационной опцией register_globals:

Пример 15-14. Пример опасного кода с register_globals = on

<?php

// устанавливаем переменную $authorized = true только для пользователей, прошедших авторизацию

if (authenticated_user()) {

$authorized = true;

}

// Поскольку в случае неудачи при проверке авторизации переменная $authorized

// не установлена, она может быть установлена автоматически, благодаря register_globals,

// например, при GET запросе GET auth.php?authorized=1.

// Таким образом, пройти эту проверку можно без авторизации

if ($authorized) {

include "/highly/sensitive/data.php";

}

?>

В случае register_globals = on логика работы скрипта может быть нарушена. В случае, если установленное значение off, переменная $authorized не может быть установлена из внешних данных запроса, и скрипт будет работать корректно. Но все же инициализация переменных - один из признаков хорошего тона в программировании. Например, в приведенном выше участке кода мы могли поместить $authorized = false в качестве первой строки. Такой код работал бы как со значением on, так и off опции register_globals, и подразумевая, что по умолчанию пользователь не проходил авторизацию.

Приведем еще один пример, использующий сессии. В случае, если register_globals = on, мы можем использовать переменную $username в приведенном ниже примере, но тогда у нас не будет уверенности в достоверности ее значения (к примеру, она могла быть передана в GET-запросе).

Пример 15-15. Пример использования сессий со значением register_globals on или off

<?php

// Мы не знаем, откуда получена переменная $username, но точно знаем, что

// переменная $_SESSION хранит в себе данные сессии

if (isset($_SESSION['username'])) {

echo "Hello <b>{$_SESSION['username']}</b>";

} else {

echo "Hello <b>Guest</b><br />";

echo "Would you like to login?";

}

?>

Также существует возможность реализации оперативного реагирования в случае попытки подмены переменных. Так как во время разработки приложения мы знаем ожидаемое значение переменной, а также знаем ее достоверное значение, мы можем их сопоставить. Это не защитит код от подмены переменных, но усложнит перебор возможных вариантов. Если вы не хотите знать, как именно были получены внешние данные, используйте переменную $_REQUEST, которая состоит из данных GET и POST запросов, а также данных COOKIE. Также, информацию об этом можно найти в разделе внешние данные в PHP.

Пример 15-16. Обнаружение попытки подмены переменных

<?php

if (isset($_COOKIE['MAGIC_COOKIE'])) {

// MAGIC_COOKIE получена из достоверного источника.

// Для полной уверенности необходимо проверить ее значение.

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {

mail("admin@example.com", "Обнаружена попытка взлома", $_SERVER['REMOTE_ADDR']);

echo "Обнаружено нарушение безопасности, администратор уведомлен.";

exit;

} else {

// MAGIC_COOKIE в данных запроса не присутствует

}

?>

Следует понимать, что установка register_globals в off не сделает ваш код безопасным. Каждую полученную от пользователя переменную следует проверять на соответствие ожидаемому значению. Всегда проверяйте ввод пользователя и инициализируйте все используемые переменные. Для проверки на наличие неинициализированных переменных можно включить в опцию error_reporting() отображение ошибок категории E_NOTICE.

Суперглобальные переменные: замечание о доступности: Начиная с PHP 4.1.0, стали доступными суперглобальные массивы, такие как $_GET, $_POST, $_SERVER и т.д. Дополнительную информацию смотрите в разделе руководства superglobals

joost:
А кто как делает? Включаете register_globals или используете $_GET?

В вашем случае исключительно

$_GET["code"]
.

Вообще register_globals лучше всегда держать в off, имхо.

shuriks:
Сейчас смотрел логи сервера и обнаружил следующее:

Заходил бот D о чем свидетельствует запись "Yandex/1.03.003 (compatible; Win16; D)".

Был бот I - "Yandex/1.03.003 (compatible; Win16; I)".

Но это, неверное, не тот бот, ведь бот I в логах должен быть записан как Yandex/1.01.001 (compatible; Win16; I).

Что это за "Yandex/1.03.003 (compatible; Win16; I)"?

Есть такая фишка. У себя его тоже обнаружил. После его прохода сайт вылетел из индексации.

Да, несколько обращений именно от этого бота.

Дык, по ключевику "мартини апельсиновый сок" вы все равно будете выведены в поиске, если раскручивались под "апельсиновый сок".

rpuwa:
ХАХА, а за Директ тоже банят?! :D

А говорят еще, что если на какой-либо странице сайта найдут имя Платон и в радиусе 100 слов от него будет какое либо оскорбительное выражение, то сайт забанят не только в Яндексе, но и в Гугле, Рамблере, Яхо, Апорте и Вебальте :)

Данил:
Скорее всего правильно Yandex/1.03.003 (compatible; Win16; D) :)

По логам именно Yandex/1.03.003 (compatible; Win16; I) :)

Всего: 716