Python использует случайное хэш-семя, чтобы предотвратить атакующие из tar-pitting вашего приложения, отправив вам ключи, предназначенные для столкновения. См. Раскрытие оригинальной уязвимости . Смещая хэш с случайным семенем (установленным один раз при запуске), злоумышленники больше не могут предсказать, какие клавиши будут сталкиваться.
Вы можете установить фиксированное семя или отключить эту функцию, установив PYTHONHASHSEED
переменная среды ; по умолчанию это random
, но вы можете установить его на фиксированное положительное целочисленное значение, при этом 0
полностью отключит эту функцию.
В версиях версии 2.7 и 3.2 Python функция отключена по умолчанию (используйте -R
или установите PYTHONHASHSEED=random
, чтобы включить его); он включен по умолчанию в Python 3.3 и выше.
Если вы полагались на порядок ключей в словаре Python или устанавливали, то не делайте этого. Python использует хеш-таблицу для реализации этих типов, и их порядок зависит от истории вставки и удаления , а также от случайного хэш-семени.
Также см. object.__hash__()
специальная документация метода :
Примечание. По умолчанию значения
blockquote>__hash__()
объектов str, bytes и datetime «соленые» с непредсказуемым случайным значением. Хотя они остаются постоянными в рамках отдельного процесса Python, они не предсказуемы между повторными вызовами Python. Это предназначено для обеспечения защиты от отказа в обслуживании, вызванного тщательно подобранными входами, которые используют наихудшую производительность при вложении dict, сложность O (n ^ 2). Подробнее см. В http://www.ocert.org/advisories/ocert-2011-003.html . Изменение значений хеша влияет на порядок итераций dicts, множеств и других сопоставлений. Python никогда не предоставлял гарантии об этом заказе (и обычно он варьируется между 32-битными и 64-битными сборками). См. ТакжеPYTHONHASHSEED
.Если вам нужна стабильная реализация хэша, вы, вероятно, захотите посмотреть на модуль
hashlib
; это реализует криптографические хэш-функции. Проект pybloom использует этот подход .Поскольку смещение состоит из префикса и суффикса (начальное значение и конечное значение XORed, соответственно), вы не можете просто сохранить смещение, к сожалению. С положительной стороны это означает, что злоумышленники не могут легко определить смещение с тактическими атак.
Попробуйте свойство вертикального выравнивания
input, button {
vertical-align:middle;
}
Хорошая вертикальная компоновка с display: list-item;
в Выровнять вертикально входные элементы в div
Не повезло в Chrome / FireFox / Opera / Safari с vertical-align: …;