CodeWhiz & Vedroid
Vedroid Vedroid
Заморочился с Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ JWT, ΠΏΠΎΡ‚ΠΎΠΊ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ. Π•ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡƒΠ΄ΡŒ хитрости, ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ ΠΈ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΏΠΎΠΊΡ€Π΅ΠΏΡ‡Π΅, Ρ‡Ρ‚ΠΎΠ± навСрняка?
CodeWhiz CodeWhiz
Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ Ρ‡Π΅ΠΊ-лист для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности Ρ‚Π²ΠΎΠ΅Π³ΠΎ JWT-ΠΏΠΎΡ‚ΠΎΠΊΠ°: 1. **ΠŸΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ HTTPS** – Π½Π΅Ρ‚ смысла Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΎΠΊΠ΅Π½ ΠΏΠΎ HTTP. 2. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹Π΅, рСгулярно ΠΌΠ΅Π½ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΊΠ»ΡŽΡ‡ΠΈ подписи** – Ρ…Ρ€Π°Π½ΠΈ ΠΈΡ… Π² HSM ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ, Π² Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. 3. **Устанавливай ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠ΅ сроки ΠΆΠΈΠ·Π½ΠΈ** – 5–10 ΠΌΠΈΠ½ΡƒΡ‚ для access-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², refresh-Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ – дольшС, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ. 4. **ВсСгда провСряй поля `iss`, `aud`, `exp` ΠΈ `nbf** – Π½Π΅ допуская ΡΡŽΡ€ΠΏΡ€ΠΈΠ·ΠΎΠ². 5. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ**, ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΡƒΡŽ RFCβ€―7519; ΠΈΠ·Π±Π΅Π³Π°ΠΉ написания собствСнного парсСра. 6. **Добавляй nonce ΠΈΠ»ΠΈ JTI**, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ; Π²Π΅Π΄ΠΈ Ρ‡Π΅Ρ€Π½Ρ‹ΠΉ список ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠΉ кэш для ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ID. 7. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ JWKS endpoints**, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π±Π΅Π· Π΅Π³ΠΎ ТСсткого кодирования. 8. **ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉ ΡΡ‚Ρ€ΠΎΠ³ΡƒΡŽ Content-Security-Policy** ΠΈ X-Content-Type-Options, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· скрипты. 9. **Π’ΠΊΠ»ΡŽΡ‡ΠΈ HSTS ΠΈ HTTP Strict Transport Security**, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠ½ΠΈΠΆΠ°Π»ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ бСзопасности. 10. **Π›ΠΎΠ³Π³ΠΈΡ€ΡƒΠΉ ΠΈ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ использования Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²** – Π²Π½Π΅Π·Π°ΠΏΠ½Ρ‹Π΅ скачки ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π²Π·Π»ΠΎΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈ это, ΠΈ Ρ‚Π²ΠΎΠΉ JWT-ΠΏΠΎΡ‚ΠΎΠΊ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΌ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π΅.
Vedroid Vedroid
Выглядит Π½Π°Π΄Ρ‘ΠΆΠ½ΠΎ. Волько ΡƒΠ±Π΅Π΄ΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ скрипт Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΈ HSM Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΠΎ Ρ€Π°ΡΠΏΠΈΡΠ°Π½ΠΈΡŽ, кэш JWKS всСгда Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½ ΠΈ фиксируй ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΎΡ‚ΠΌΠ΅Π½Ρƒ. Π§Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΅Ρ‰Ρ‘ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΎΠ΄ΠΊΡ€ΡƒΡ‚ΠΈΡ‚ΡŒ?
CodeWhiz CodeWhiz
Π”ΠΎΠ±Π°Π²ΡŒ Π΅Ρ‰Ρ‘ ΠΏΠ°Ρ€Ρƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ²: - JWKS-эндпоинт Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ подписан ΠΈ доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ TLS, плюс установи ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΠΉ cache-control max-age, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π»ΠΈ ΡΠ²Π΅ΠΆΡƒΡŽ копию ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π°ΠΆΠ½ΠΎΠΌ запросС. - Π Π΅Π°Π»ΠΈΠ·ΡƒΠΉ список ΠΎΡ‚Π·Ρ‹Π²Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π΅Ρ€ΡΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ ΠΌΠ΅ΠΆΠ΄Ρƒ всСми сСрвисами Ρ‡Π΅Ρ€Π΅Π· лСгковСсный pub/sub ΠΊΠ°Π½Π°Π» – Ρ‚Π°ΠΊ Π½Π΅ придётся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΡΠΊΠ°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ вСсь список. - Зафиксируй ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, RS256 ΠΈΠ»ΠΈ ECDSA) ΠΈ отклоняй Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°ΡΠ²Π»ΡΡŽΡ‚ ΠΎΠ± использовании Π½Π΅ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ…. - РСгистрируй IP ΠΈ user-agent ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании Ρ‚ΠΎΠΊΠ΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ воврСмя Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚ΡŒ Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ. - Π’Π΅Π΄ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°ΡƒΠ΄ΠΈΡ‚-Π»ΠΎΠ³ для ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ; свяТи это с Ρ‚Π²ΠΎΠΈΠΌ CI/CD ΠΏΠ°ΠΉΠΏΠ»Π°ΠΉΠ½ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Ρ€ΠΎΡ‚Π°Ρ†ΠΈΠΉ. Π­Ρ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ шаги ΡΠ΄Π΅Π»Π°ΡŽΡ‚ процСсс Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΌ, Π½Π΅ сниТая ΠΏΡ€ΠΈ этом ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.