Могут ли злонамеренные пользователи изменять viewstate?

Если ViewStatemac включен в приложении ASP.NET, может ли пользователь изменить содержимое ViewState и успешно передать его обратно на сервер?

У меня есть приложение (написанное кем-то другим), использующее то, что есть во ViewState, для создания не параметризованного ORDER BY предложение в запросе SQL. Должен ли я беспокоиться о внедрении SQL?

2 ответа

Решение

Если ViewStateMAC включен, злоумышленник должен иметь возможность взломать "машинный ключ", чтобы изменить ViewState, поэтому он должен быть достаточно безопасным, если это значение остается закрытым.

Значение установлено в коде позади (например, ViewState["OrderBy"]) а не через контроль? Если это так, это не подлежит проверке событий.

Да, вы можете изменить состояние представления и опубликовать его, просто скопировав страницу, вставив ее на локальный сайт в виде HTML, и измените ее.

Однако при повторной публикации проверка не будет выполнена и не будет принята asp.net, если у вас открыто свойство EventValidation - оно открыто по умолчанию.

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

Посмотрите эту простую HTML-форму:

<form name="input" action="someaction.asp" method="post">
    <select name="sel">
      <option value="1" >Milk</option>
      <option value="2" >Coffee</option>
      <option value="3" >Tea</option>
    </select>
<input type="submit" value="Submit">
</form>

любой может изменить <option value="1" >Milk</option> в <option value="1 OR 1=1" >Milk</option> и отправьте его обратно, как есть, так что вам нужно добавить хеш-код перед его рендерингом и опубликовать его вместе с остальными, и проверить, что значения совпадают (вернуть тот же хеш).

Некоторые сайты и кодировщики выбирают для шифрования каждое значение в обратной записи, если вы, например, видите amazon, вы заметите такие строки:

<input name="offeringID.1" value="y3A0L7tSnS%2B7LBLvI....morehere" type="checkbox" id="fbt_x_check" style="display: none;" class="check" checked="checked">

И если вы используете собственный HTML-контроль, вам нужно добавить свою личную проверку значений, чтобы избежать изменения.

Разработчики asp.net решили создать общие хэш-значения для всех элементов управления и оставить их в EventValidation.

Так что оставьте EventValidation включенным, и модификация не удастся.

Другие вопросы по тегам