2013-05-24 2 views
3

В веб-приложении PHP я использую идентификатор сеанса как имя файла. В определенный момент, эти файлы будут удалены, с кодом, какМожно ли использовать идентификатор сеанса как имя файла в PHP?

unlink('tmp/'.session_id()); 

Я отдаю себе отчет в том, что пользователь может изменить его/ее идентификатор сессии. Поэтому мне интересно, можно ли изменить идентификатор сеанса на что-то вроде «/../../etc/passwd».

Мой вопрос сейчас, если такой «взлом» возможен, и как я могу лучше защитить свой код.

Заранее благодарю вас за ответы!

Комментарий: Я знаю об опасностях и методах предотвращения, касающихся пользователей, угоняющих сеансы других пользователей, это не проблема в моем случае на данный момент.

ответ

5

Если у вас есть очень привинченная настройка, пользователь никогда не сможет напрямую изменить свой идентификатор сеанса, поскольку это никогда не должно быть прямым параметром - его следует использовать, чтобы проверить, существует ли он, но никогда для создания произвольного сеанса на основе этого имени.

Если это не так в вашей системе, однако, рекомендация дезинфицировать: preg_replace("#([^0-9a-f]+)#i","",session_id());

+0

Хорошо, спасибо, - если это экономит очень скрупулезные настройки, лучше использовать его. Другие пользователи могут использовать это программное обеспечение на своих серверах ... – user2349661

+0

@ user2349661: если они могут использовать его на своих серверах, вы можете проверить, существует ли папка 'tmp' и доступна для записи на всех платформах, прежде чем реализовать что-то подобное. –

0

Вы можете использовать Regex заменить все плохие символы:

$sess = session_id(); 
$clean_sess = preg_replace("/[^a-zA-Z0-9]/Uis", "", $sess); 
unlink('tmp/'.$clean_sess); 
+0

Не нужно использовать 'Uis'. – Gumbo

Смежные вопросы