Самый простой способ скрыть поля ввода пароля? - PullRequest
3 голосов
/ 27 августа 2010

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

Есть ли способ перебрать Request.Form и выяснить, какие элементы являются паролями? Это делается на низком уровне, поэтому мы не можем искать конкретные элементы управления.

Естественно, мы могли бы проверить, к какому типу относится поле ввода, но я не уверен, что это самый чистый способ. Совет

Ответы [ 5 ]

2 голосов
/ 27 августа 2010

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

Добавьте на все страницы скрипт, который собирает все имена полей пароля в новое поле, сгенерированное клиентом, например, так::

function collectPasswordFields() {
    var inputs = document.getElementsByTagName('input'), list = [];
    for (var i = 0; i < inputs.length; ++i)
        if (inputs[i].type == 'password') list.push(inputs[i].name);
    var field = document.createElement('input');
    field.name = '__password_fields';
    field.value = list.join(',');
    document.getElementsByTagName('form')[0].appendChild(field);
}

Затем перехватите дополнительное поле в обработчике ошибок на стороне сервера и удалите именованные поля из электронного письма.

Может ли что-то подобное работать для вас?

2 голосов
/ 27 августа 2010

Используйте белый список имен полей, которые вы хотите отправить по электронной почте.

Там могут быть сотни имен полей, которые будут размещены на вашем сервере. И пароль не единственное поле, которое является чувствительным. В зависимости от вашего приложения, могут быть другие вещи, к которым следует относиться с небольшим уважением.

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

0 голосов
/ 27 августа 2010

Несколько решений, хотя я не уверен, насколько ярким является любое из них:

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

2) Сохраните файл ресурсов на веб-сайте, в котором указано имя страницы, идентификатор поля, и проверьте обработчик исключений для этого файла ресурсов (может не работать, если исключение связано с ResourceManager)

3) Сохранить таблицу базы данных, как в идее 2. Существуют те же проблемы.

0 голосов
/ 27 августа 2010

Как Джером уже указал в комментариях , просто следите за именами полей ввода вашего пароля и фильтруйте их перед отправкой отчета об ошибке / исключении.Это лучшее решение, так как тип поля ввода не представлен.

0 голосов
/ 27 августа 2010

Самый простой способ - проверить атрибут type элемента ввода.

В спецификации HTML5 есть , чтобы сказать о input type=password:

Элемент input с атрибутом type, значением которого является «password», представляет собой однострочный текстовый элемент управления для ввода пароля.

Тип данных: Текст без разрывов строк (конфиденциальная информация)
Тип элемента управления: Текстовое поле, которое затрудняет ввод данных

Это обязательное требование для всех реализаций пользовательского агента, так было и со времен HTML 2. Так что это действительно самый чистый способ сделать то, что вы хотите.

Если вы хотите сделать это на стороне клиента (вы говорили об отправке данных на сервер), то это относительно просто:

function hidePasswords() {
    var inputs = document.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; ++i)
        if (inputs[i].type == 'password') input[i].value = '*****';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...