Factom & StackBlitzed
Factom Factom
ΠŸΡ€ΠΈΠ²Π΅Ρ‚, я Ρ‚ΡƒΡ‚ копалась, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅ Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² нашСм клиСнтском ΠΊΠΎΠ΄Π΅. ΠœΠΎΠΆΠ΅Ρ‚, вмСстС Π²Ρ‹Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄Ρ‘ΠΆΠ½Ρ‹ΠΉ, ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΉ ΠΏΠ»Π°Π½, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ?
StackBlitzed StackBlitzed
ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π±Π΅Π· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. ΠŸΡ€ΠΎΡΡ‚ΠΎ Π±ΡƒΠ΄ΡŒ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½Π° ΠΈ Π½Π΅ Π΄Π°ΠΉ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΉ строчкС Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹ΡΠΊΠΎΡ‡ΠΈΡ‚ΡŒ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°. Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ Ρ€Π΅Ρ†Π΅ΠΏΡ‚: 1. **Никогда Π½Π΅ Ρ…Ρ€Π°Π½ΠΈ сСкрСты Π² ΠΊΠΎΠ΄Π΅** – Π²Ρ‹ΠΊΠΈΠ½ΡŒ всС API-ΠΊΠ»ΡŽΡ‡ΠΈ, Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΈ ΠΏΠ°Ρ€ΠΎΠ»ΠΈ ΠΈΠ· рСпозитория ΠΈ помСсти ΠΈΡ… Π² ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ срСду. Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠΉ, подписанный Ρ‚ΠΎΠΊΠ΅Π½ с быстрым сроком дСйствия. 2. **Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ HTTPS Π²Π΅Π·Π΄Π΅** – ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ TLS 1.2+ ΠΈ Π·Π°ΠΊΡ€Π΅ΠΏΠΈ сСртификаты, Ссли моТСшь. НичСго Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· сСтСвой ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ, Ссли всё Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΎ. 3. **ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈ Content Security Policy (CSP)** – Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉ встроСнныС скрипты, Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Π΅ источники, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ nonce ΠΈΠ»ΠΈ Ρ…Π΅Ρˆ для любого Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ встроСнного ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ остановит XSS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ являСтся Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ. 4. **ΠœΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠΉ объСм ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…** – отправляй Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹. Удаляй Π»ΡŽΠ±ΡƒΡŽ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ Π² ΡΠ΅Ρ‚ΡŒ. 5. **Π₯Π΅ΡˆΠΈΡ€ΡƒΠΉ Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ значСния ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ** – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΡΠΊΡƒΡŽ Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ (SHA-256 ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ‚), Ссли Π½ΡƒΠΆΠ½ΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ локально, Π½ΠΎ Π½Π΅ полагайся Π½Π° это для Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Боль Ρ…Ρ€Π°Π½ΠΈ Π½Π° сСрвСрС. 6. **ИзбСгай eval ΠΈ динамичСских ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ²** – ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊΠ°ΠΌ Π²Π½Π΅Π΄Ρ€ΡΡ‚ΡŒ ΠΊΠΎΠ΄. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ статичСскиС ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ ΠΈ извСстныС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. 7. **ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠΉ сторонниС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ** – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ lockfile, фиксируйся Π½Π° извСстной Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ вСрсии, ΠΈ Ρ…Ρ€Π°Π½ΠΈ старыС, ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ°ΠΏΠΊΠ΅ для Π½ΠΎΡΡ‚Π°Π»ΡŒΠ³ΠΈΠΈ. 8. **ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΠΉ частоту запросов ΠΈ выявляй Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ** – Ссли ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ спамит эндпоинт, Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠΉ Π΅Π³ΠΎ. 9. **ВСстируй ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ** – запускай ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ Ρ„Ρ€Π΅ΠΉΠΌΠ΅ с строгими Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ sandbox, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΠΉ. 10. **ΠŸΠΎΡΡ‚ΠΎΡΠ½Π½Ρ‹ΠΉ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³** – слСди Π·Π° историСй ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ², настрои простой скрипт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сканируСт Π½ΠΎΠ²Ρ‹Π΅ строки, ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ Π½Π° сСкрСты, ΠΈ срывай сборку, Ссли ΠΎΠ½ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚. Π­Ρ‚ΠΎ основной Ρ†ΠΈΠΊΠ». Π”ΠΎΠ±Π°Π²ΡŒ ΠΏΠ°Ρ€Ρƒ ΡŽΠ½ΠΈΡ‚-тСстов Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Ρ€ΡƒΠ±Π΅ΠΆΠ΅, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ ΠΊΠΎΡ„Π΅ΠΈΠ½Π°, ΠΈ Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΡˆΡŒ ΡƒΡ‚Π΅Ρ‡Π΅ΠΊ. Π”Π°ΠΉ Π·Π½Π°Ρ‚ΡŒ, Ссли Ρ…ΠΎΡ‡Π΅ΡˆΡŒ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· шагов.