Factom & 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. **ΠΠΎΡΡΠΎΡΠ½Π½ΡΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³** β ΡΠ»Π΅Π΄ΠΈ Π·Π° ΠΈΡΡΠΎΡΠΈΠ΅ΠΉ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ², Π½Π°ΡΡΡΠΎΠΈ ΠΏΡΠΎΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π½ΠΈΡΡΠ΅Ρ Π½ΠΎΠ²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΏΠΎΡ
ΠΎΠΆΠΈΠ΅ Π½Π° ΡΠ΅ΠΊΡΠ΅ΡΡ, ΠΈ ΡΡΡΠ²Π°ΠΉ ΡΠ±ΠΎΡΠΊΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΡΠΎ-ΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡ.
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΈΠΊΠ». ΠΠΎΠ±Π°Π²Ρ ΠΏΠ°ΡΡ ΡΠ½ΠΈΡ-ΡΠ΅ΡΡΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΡΠ±Π΅ΠΆΠ΅, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΠΉ ΡΡΠΎΠ²Π΅Π½Ρ ΠΊΠΎΡΠ΅ΠΈΠ½Π°, ΠΈ ΡΡ Π½Π΅ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠ΅ΡΠ΅ΠΊ. ΠΠ°ΠΉ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ
ΠΎΡΠ΅ΡΡ ΡΠ³Π»ΡΠ±ΠΈΡΡΡΡ Π² ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΈΠ· ΡΠ°Π³ΠΎΠ².