#javascript #security
#javascript #Безопасность
Вопрос:
Это своего рода общий вопрос «Хорошая идея / плохая идея».
Мой сценарий: я пишу ASP.NET Приложение MVC3, состоящее всего из 1 страницы (один вид / контроллер). В этом представлении отображается сетка «обращений«, и когда пользователь нажимает на одно из этих обращений, я использую jquery ajax ( $.ajax
), чтобы поменять местами видимую часть страницы и загрузить детали этого обращения (но никогда не менять страницу).
Все еще со мной? Спасибо!
Теперь, когда отображается это новое представление сведений о случае, пользователь может отредактировать обращение одним из многих способов. Измените приоритет, измените статус и т. Д. Для этого я также использую ajax-функцию jquery.
Мой вопрос: как я должен хранить идентификатор обращения? Можно ли хранить его в HTML? Есть ли лучшее место для его хранения?
Все обращения имеют идентификатор Guid, и в настоящее время, когда детали обращения загружаются (с использованием ajax) Я добавляю пользовательский атрибут в представление сведений о случае <div>
, чтобы я знал идентификатор обращения. Это означает, что идентификатор обращения виден любому, кто просматривает источник страницы. Я думал об использовании функции jQuery .data() для ее хранения, которая не была бы видна источнику страницы, но была бы доступна из Firebug других инструментов инспектора.
Какова наилучшая практика для этого? Я действительно не могу себе представить, как мой пользователь будет что-то делать с идентификатором обращения, но я пытаюсь быть немного параноиком здесь.
Заранее спасибо за любые мысли! И спасибо за чтение этого романа!
Ответ №1:
Вы мало что можете сделать с вещами, которые браузер видит каким-либо образом, поскольку код и данные в DOM не защищены от пользователя.
Очевидно, что вы не хотите отправлять что-либо пользователю, которому не разрешено видеть эту информацию, поэтому вы не хотите выполнять какую-либо фильтрацию данных на стороне клиента, которая зависит от роли пользователя.
Но что касается внутренних данных, вам просто нужно защитить свой периметр — методы не могут принимать несоответствующие идентификаторы (т. Е. Идентификатор учетной записи, Который действителен только для другого отправляемого клиента), но вы мало что можете сделать с самими идентификаторами.
Комментарии:
1. Спасибо, случай. Я вроде как понял, что нет «волшебного» способа получить эти идентификаторы, не раскрывая их пользователю, но я хотел выложить это здесь, чтобы посмотреть, что придумали другие умные программисты. Я ценю вклад.
Ответ №2:
Отправляя идентификатор обращения с сервера в браузер, вы предоставляете его пользователю. Если вы не хотите, чтобы у пользователя был идентификатор обращения, не отправляйте его в браузер.
Комментарии:
1. Спасибо, Роб. Я ценю вклад. Что было бы хорошим способом узнать, какой регистр обновляется? Может быть, какой-то другой выдуманный идентификатор? Поскольку я никогда не меняю страницу, я не могу сделать это в контроллере. Мне нужен JavaScript, чтобы сообщить моему контроллеру, для какого случая изменить приоритет / статус.
Ответ №3:
Я бы предоставил какой-то очищенный, «воображаемый» идентификатор, если вас это беспокоит. Если бы это выполнялось в цикле, я бы предложил основывать его на индексе цикла.
Однако, в конечном счете, вам нужно будет использовать какой-то уникальный идентификатор для обращения, который будет идентифицировать его при вызовах ajax в базе данных.
На самом деле, я делал то же самое раньше и просто кодировал поле ID в разметке, и это редко имело значение. Этот идентификатор вреден только в том случае, если ваша безопасность слаба. Если вы защитили свою базу данных и обеспечили достойный уровень безопасности приложения, тогда все должно быть в порядке. Если вы этого не сделали, то вам есть о чем беспокоиться, кроме разметки.