Python, saldırganların çarpışmak üzere tasarlanmış anahtarlar göndererek uygulamanızı katledilmesini önlemek için rasgele bir hash tohumu kullanır. original vulnerability disclosure'a bakın. Saldırıyı rastgele bir tohumla (başlangıçta bir kez ayarla) dengelemek, saldırganların hangi tuşların çarpışacağını artık tahmin edemez.
Sabit bir tohum ekleyebilir veya özelliği PYTHONHASHSEED
environment variable; varsayılan random
'dur, ancak özelliği tamamen devre dışı bırakan 0
ile sabit bir pozitif tamsayı değerine ayarlayabilirsiniz.
Python sürümleri 2.7 ve 3.2, varsayılan olarak özelliği devre dışı bırakmıştır (etkinleştirmek için -R
anahtarını kullanın veya PYTHONHASHSEED=random
'u ayarlayın); Python 3.3 ve üzeri varsayılan olarak etkinleştirilmiştir.
Python sözlüğünde tuşların sırasına güveniyorsanız veya ayarladıysanız, yapmayın. Python, bu türleri ve bunların sırasını depends on the insertion and deletion history ve rastgele hash tohumu uygulamak için bir karma tablo kullanır.
Not:
da object.__hash__()
special method documentation bkz Varsayılan olarak, str byte ve tarih saat nesneleri __hash__()
değerleri tahmin edilemeyen bir rastgele değere sahip “tuzlu” dir. Her bir Python işleminde sabit kalsalar da, Python'un tekrarlanan çağrıları arasında tahmin edilemezler.
Bu, bir dict ekleme, O (n^2) karmaşıklığının en kötü durum performansından yararlanan özenle seçilmiş girdilerin neden olduğu bir hizmet reddine karşı koruma sağlamak amacıyla tasarlanmıştır. Detaylar için http://www.ocert.org/advisories/ocert-2011-003.html'a bakın.
Karma değerlerinin değiştirilmesi, dicts, set ve diğer eşleştirmelerin yineleme sırasını etkiler. Python bu sipariş hakkında hiçbir zaman garanti vermedi (ve genellikle 32-bit ve 64-bit sürümleri arasında değişiyor).
Ayrıca bkz. PYTHONHASHSEED
.
Sabit bir karma uygulamasına ihtiyacınız varsa, muhtemelen hashlib
module; Bu kriptografik karma fonksiyonları uygular. pybloom project uses this approach.
Ofset bir önek ve sonek (sırasıyla başlangıç değeri ve son XOR değeri) oluşur, maalesef yalnızca ofseti depolayamazsınız. Artı tarafta, bu, saldırganların zamanlama saldırıları ile ofsetleri kolayca belirleyemediği anlamına gelir.
Bu bir güvenlik özelliğidir. –
Tagged [etiket: hash-çarpışma], [tag: güvenlik], [tag: python-3.3] – smci