Собственный компонент IE8 ошибка JSON.parse вызывает переполнение стека

Если я понимаю MO атак перебором правильно, то одни или несколько имен пользователей пробуют непрерывно.

существует два предложения, которые я не думаю, что видел все же здесь:

  • я всегда думал, что общепринятая практика состояла в том, чтобы иметь малую задержку (приблизительно секунда) после каждого неправильного входа в систему для каждого пользователя. Это удерживает "в лоб", но я не знаю, сколько времени одна вторая задержка держала бы атаку с подбором по словарю в страхе. (словарь 10 000 слов == 10 000 секунд == приблизительно 3 часа. Хм. Не достаточно хороший.)
  • вместо по всему сайту замедляются, почему не дроссель имени пользователя. Дроссель становится все больше резким с каждой неправильной попыткой (до предела, наверное реальный пользователь может все еще войти в систему)

Редактирование : В ответ на комментарии к дросселю имени пользователя: это - имя пользователя определенный дроссель без учета к источнику нападения.

, Если имя пользователя регулируют, то даже скоординированное нападение имени пользователя (много IP, единственное предположение на IP, то же имя пользователя) было бы поймано. Отдельные имена пользователей защищены дросселем, даже если взломщики свободны судить другого пользователя/передачу во время тайм-аута.

С точки зрения взломщиков, во время тайм-аута Вы можете брать в первый раз, когда предполагают 100 паролей и быстро обнаруживают один неправильный пароль на учетную запись. Можно только смочь высказать 50-секундные предположения в течение того же периода времени.

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

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

Дополнительные улучшения:

  • обнаруживают дюйм/с, которые предполагают несколько учетных записей - 408 Тайм-аутов Запроса
  • обнаруживают дюйм/с, которые предполагают ту же учетную запись - 408 Тайм-аутов Запроса после большого (скажите 100), количество предположений.

идеи UI (может не подойти в этом контексте), который может также совершенствовать вышеупомянутое:

  • , если Вы управляете установкой пароля, затем показывая пользователю , насколько сильный их пароль , поощряет их выбирать лучший.
  • , если Вы управляете входом в систему страница после маленького (говорят 10) количество предположений единственного имени пользователя, предложите КАПЧУ.

32
задан 10 revs 19 August 2009 в 21:42
поделиться

3 ответа

6
ответ дан 27 November 2019 в 21:16
поделиться

Кажется, здесь все работает нормально:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Test</title>
</head>
<body>
<pre>
<script type="text/javascript">
document.writeln('');
var o = {
    "firstName": "cyra",
    "lastName": "richardson",
    "address": {
        "streetAddress": "1 Microsoft way",
        "city": "Redmond",
        "state": "WA",
        "postalCode": 98052
    },
    "phoneNumbers": [
        "425-777-7777", 
        "206-777-7777"
     ]
};
var s = JSON.stringify(o);
document.writeln(s);
var p = JSON.parse(s, function (key, val) {
    if (typeof val === 'string') return val + '-reviver!';
    else return val;
});
dump(p);

function dump(o) {
    for (var a in o) {
        if (typeof o[a] === 'object') {
            document.writeln(a + ':');
            dump(o[a]);
        } else {
            document.writeln(a + ' = ' + o[a]);
        }
    }
}
</script>
</pre>
</body>
</html>

Проблема либо в поврежденной установке Internet Explorer 8 (вы пытаетесь запустить несколько копий Internet Explorer на одной установке Windows?), Либо в вашей ввод неверен.

Вы также можете прочитать Собственный JSON в IE8 . Этот конкретный абзац может представлять интерес:

Необязательный аргумент возрождения - это пользователь определенная функция, используемая для синтаксического анализа сообщения изменения. Результирующий объект или массив проходит рекурсивно, reviver функция применяется к каждому члену. Каждое значение элемента заменяется на значение, возвращаемое восстановителем . Если reviver возвращает null, объект участник удален. Обход и Призыв к оживлению сделан в почтовый заказ. Вот так; каждый объект «возрождается» после , все его члены ' оживил ´.

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

function (key, val) {
    return val + '-reviver!';
}

Очевидно, что если эта функция reviver применяется к узлу адреса выше после применения ко всем его дочерним элементам, я полностью уничтожу адрес объект.

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

Можете ли вы отредактировать свой вопрос и опубликовать образец реальных данных, которые демонстрируют проблему, чтобы я мог попробовать здесь?

2
ответ дан 27 November 2019 в 21:16
поделиться

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

Эрический закон в Microsoft говорит:

Команда JavaScript сообщает, что это известная проблема в JavaScript Engine.

3
ответ дан 27 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: