Что мешает пользователю добавлять элементы управления на клиентскую страницу ASP.NET? - PullRequest
0 голосов
/ 24 апреля 2010

Это восходит к моему другому вопросу, на который я думал, что было достаточно ответов, но после размышления не уверен, что это было (извините).

Справка:

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

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

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

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

  1. Если пользователь может добавить в мою коллекцию гнусный элемент управления и использовать его для атаки SQL-инъекцией.

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

Я согласен, что это "взлом" способа сделать это. Но мой вопрос в том, является ли это угрозой безопасности и есть ли «простой» способ сделать это менее взломанным способом?

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

PS: Я видел добавление свойства для каждого элемента управления и шифрование состояния представления было бы немного более безопасным.

Ответы [ 4 ]

1 голос
/ 24 апреля 2010

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

Элементы управления, которые вы создаете "вживую" на сервере с runat="server". Вам не нужно проверять ваш специальный идентификатор в коллекции элементов управления. Как сказал Харв, вам нужно проверить все входные данные от ваших элементов управления.

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

1 голос
/ 24 апреля 2010

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

Вы должны всегда проверять каждый отдельный вход, который отправляется обратно из ваших элементов управления для целостности данных. Все входные данные должны быть обработаны для атак с использованием SQL-инъекций путем удаления ненужных специальных символов и шаблонов, которые могут указывать на вектор атаки. Если все, на что вы полагаетесь, это идентификатор элемента управления, который говорит, что данные правильные, тогда у вас есть огромная дыра в логике проверки.

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

http://msdn.microsoft.com/en-us/library/ms998258.aspx

0 голосов
/ 24 апреля 2010

Я думаю, что вы ответили сами, не так. Но я чувствую, что вы все еще немного запутываетесь (создание / создание / определение элементов управления, а не восстановление ViewState / управление состоянием).

Может быть, следующие две информации помогут немного прояснить ситуацию:

Я очень тепло рекомендую вторую статью всем, кто использует ASP.NET (и, следовательно, ViewState).

0 голосов
/ 24 апреля 2010

Я попытаюсь ответить на мой вопрос, потому что я думаю, что это единственный способ:

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

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

...