Warning: session_start() [function.session-start]: The session id is too long or contains illegal characters, valid characters are a-z, A-Z, 0-9 and '-,' in .... on line ..
Как минимум это приведет к раскрытию путей на сайте. Как максимум сложно даже представить...
У меня к примеру получилось на локалке получить админские права, подставив админский идентификатор сессии в phpsessid...
Потому вместо обычного session_start лучше использовать обертку, хотя бы такую
Свернутый текст
function my_session_start()
{
if(isset($_COOKIE['PHPSESSID']))
$sessid = $_COOKIE['PHPSESSID'];
elseif(isset($_GET['PHPSESSID']))
$sessid = $_GET['PHPSESSID'];
else
{
session_start();
return false;
}
if (!preg_match('/^[a-z\d]{16,32}$/i', $sessid))
session_id(md5('здесь генерируется случайная строка'));
session_start();
}
Что думаете по этому поводу?
Спустя 3 минуты, 25 секунд (5.10.2012 - 14:11) m4a1fox написал(а):
Winston
Солидно. Реально открытие! Для меня, так же, как и использование exit; без скобок....
Видимо надо так и делать....
У меня только один вопрос.... как я понял ты сумел заломиться к себе в админку... не поделишься подробностями...
Солидно. Реально открытие! Для меня, так же, как и использование exit; без скобок....
Видимо надо так и делать....
У меня только один вопрос.... как я понял ты сумел заломиться к себе в админку... не поделишься подробностями...
Спустя 6 минут, 9 секунд (5.10.2012 - 14:17) Winston написал(а):
Цитата (m4a1fox @ 5.10.2012 - 14:11) |
не поделишься подробностями... |
В htaccess пишешь путь куда сохранять файлы сессий
php_value session.save_path /path
Заходишь под админом, потом смотришь в папке с каким именем создался файл, копируешь имя и вставляешь в куку phpsessid, и если у тебя информация о том является ли пользователь админом или нет, хранится в сессии, то ты станешь админом. Вот так..
Спустя 3 минуты, 26 секунд (5.10.2012 - 14:21) Winston написал(а):
Узнав об этой трабле, я направился тестировать другие сайты
... и ужаснулся, что практически на любом сайте, где я пробовал получилось вывести на экран этот варнинг... То есть очень не многие сайты используют фильтрацию phpsessid

Спустя 2 минуты, 14 секунд (5.10.2012 - 14:23) m4a1fox написал(а):
Winston
Сейчас протестим.
Сейчас протестим.
Спустя 14 минут, 16 секунд (5.10.2012 - 14:37) killer8080 написал(а):
Winston
не вижу тут проблемы, а уж тем более уязвимости.
не вижу тут проблемы, а уж тем более уязвимости.
Цитата (Winston @ 5.10.2012 - 14:08) |
Как минимум это приведет к раскрытию путей на сайте. Как максимум сложно даже представить... |
Это проблема не правильной обработки ошибок в продакшине, но никак ни сессий!
Как максимум сложно даже представить..
как максимум ровным счетом ничего, никаких привилегий хакер не получит.
Цитата (Winston @ 5.10.2012 - 14:08) |
У меня к примеру получилось на локалке получить админские права, подставив админский идентификатор сессии в phpsessid... |
И что? Так и должно было быть. Защита сессий ни в том, что идентификатор нельзя подсунуть, а в том, что не реально его угадать.
Спустя 2 минуты, 26 секунд (5.10.2012 - 14:40) Winston написал(а):
Цитата (killer8080 @ 5.10.2012 - 14:37) |
как максимум ровным счетом ничего, никаких привилегий хакер не получит. |
Хм... Значит не все так плохо как кажется..?

Спустя 4 минуты, 55 секунд (5.10.2012 - 14:45) killer8080 написал(а):
Цитата (Winston @ 5.10.2012 - 14:40) |
Хм... Значит не все так плохо как кажется..? |
Да проблемы в общем то и нет

Спустя 1 минута, 43 секунды (5.10.2012 - 14:46) Winston написал(а):
Цитата (killer8080 @ 5.10.2012 - 14:37) |
никаких привилегий хакер не получит |
Разве что увидит путь к файлу, что даст представление где файлы лежат..
Спустя 4 минуты, 10 секунд (5.10.2012 - 14:51) killer8080 написал(а):
Цитата (Winston @ 5.10.2012 - 14:46) |
Разве что увидит путь к файлу, что даст представление где файлы лежат.. |
Ну это не единственный способ провоцировать ошибки, важно их правильно обрабатывать, и проблем не будет. Для этого случая можно просто вставить @.
Спустя 57 минут, 38 секунд (5.10.2012 - 15:48) dron4ik написал(а):
ну если пропуск в админку не
if($session){'Входи'}
if($session){'Входи'}