2012-02-21 4 views
2

Я улучшаю устаревшую систему (которую я не помогал строить) и хотел бы узнать от других людей, если некоторые вещи, которые я заметил, являются законными проблемами безопасности или нет.Неужели это использование скрытых полей небезопасно?

Прежде всего, приложение защищено с помощью логина. Однако, как только пользователь вошел в систему, во всем приложении есть 11 страниц, в которых скрытое поле сохраняет значение имени файла, а также путь для загрузки.

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

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

Благодарим Вас за отзыв!

+0

Этот вопрос, вероятно, лучше подходит для [Security.StackExchange.com] (http://security.stackexchange.com) – serk

+1

Первое звучит очень похоже на LFI мне (очень опасно, возможно, кто-то может загрузить данные доступа к базе данных , например, или в основном любой файл, который он хочет). Просто попробуйте, что произойдет, если вы поместите в это поле что-то вроде '../../../../../ etc/passwd'.Вторая (предыдущая страница) не слишком опасна для меня, если значение не может каким-либо образом манипулировать с помощью параметра GET или чего-то еще, и в этом случае это проблема с внедрением XSS/HTML. –

+0

Отличная точка, Никлас. Большое спасибо за отзывы, я определенно буду больше расследовать это! Серк, я даже не понял, что есть специальные разделы для различных тем. Я буду помнить это о будущем. Благодарю. –

ответ

2

Очень вероятно небезопасный. Скрытые поля форм - это реализация.

В частности, вы не можете полагаться на значение поля формы, отправленного обратно на сервер с тем же значением, что и исходный HTML-код.

Если сервер реализует контрмеры, такие как дезинфекция входов, контрольных сумм, хэширования, шифрования и т. Д., Использование может быть несколько более безопасным. Например, ASP.NET делает это с помощью ViewState.

Это говорит ...

Хотите увидеть, как небезопасно это? Измените один из атрибутов типа ввода скрытого поля с «скрытого» на «текст» с помощью инструментов разработчика Chrome или Firefox и посмотрите, как появится текстовое поле (где вы можете изменить его и отправить любое значение, которое вам нравится).

Я также очень рекомендую прочесть точки Мэтта о потенциальном анализе риска в его ответе.

+0

Это не совсем небезопасно, если нельзя манипулировать этим злонамеренным способом. Однако в этом случае я считаю, что по крайней мере первая проблема очень похожа на уязвимость локального файла. Почему вы говорите: «Представьте любое * имя пользователя *, которое вам нравится»? –

+0

Имя пользователя было опечатка, исправлено. Основываясь на OP, мое подозрение заключается в том, что это значения открытого текста. Если они хэшируют или зашифровывают свою другую историю. –

+0

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

0

Скрытые поля - это просто проблема с GUI - вы не видите их на экране, но они все еще там. Это делает их столь же безнадежными, как и любое другое (видимое) поле. Вот почему они не считаются «лучшей практикой».

+1

Скрытые поля могут быть законными, использовать «наилучшую практику», например, переносить идентификаторы сеанса или жетоны CSRF. –

+0

Они не «просто проблема с GUI». Вы можете редактировать скрытое поле формы для изменения данных, отправленных на сервер. – serk

+0

Точка, которую я пытаюсь сделать, заключается в том, что с точки зрения безопасности скрытое поле не лучше или хуже, чем другое поле. – John3136

0

В дополнение к чему Крис Шайн сказал:

Что уровень риска или потенциального воздействия? В зависимости от допущений, сделанных серверным сценарием, последствия могут быть довольно серьезными. Если скрытое поле содержало, скажем, user_id или username, и предполагалось, что эта информация является законной, тогда любой может выполнять действия от имени кого-либо еще, просто изменив поля формы, как объяснил Крис Шайн.

+0

Что это такое с «именем пользователя»? Он конкретно говорит нам, какие значения хранятся в этих скрытых полях, и ни один из них не является «именем пользователя». –

+1

Исходный разработчик (я), которого я угадываю, знал достаточно, чтобы не включать идентификатор пользователя или имя пользователя в скрытые поля. Тем не менее, есть * многочисленные * первичные ключи, например, Row ID, которые передаются через скрытые поля. Я не знаю, проверяется ли (без более тщательного расследования) разрешение текущего пользователя перед доступом или обновлением данных. Тем не менее, мне интересно, учитывая, что все это стоит за экраном входа в систему, все ли такие проблемы, а все равно? –

+1

@JasonLuttrell, что зависит. Если я могу получить логин (любой логин), могу ли я изменить эти поля идентификатора строки и отправить формы, чтобы получить доступ к потенциально чувствительным данным? –