Π‘Π»Π΅Π΄ΠΎΠΌ Π·Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π°ΡΠ°ΠΊΠΈ Trojan Source, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Unicode-ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΌΠ΅Π½ΡΡΡΠΈΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π²ΡΠ½Π°ΠΏΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠ΅ΠΊΡΡΠ°, ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π΅ΡΡ ΠΎΠ΄Π½Π° ΡΠ΅Ρ Π½ΠΈΠΊΠ° Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ ΡΠΊΡΡΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠ°Ρ Π΄Π»Ρ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ JavaScript. ΠΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±Π°Π·ΠΈΡΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ unicode-ΡΠΈΠΌΠ²ΠΎΠ»Π° «ㅤ» (ΠΊΠΎΠ΄ 0x3164, «HANGUL FILLER»), ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ ΡΠ°Π·ΡΡΠ΄Ρ Π±ΡΠΊΠ², Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ. Unicode-ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡ, Π² ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΎΠ΄ΠΈΡ Π΄Π°Π½Π½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° Π½Π°ΡΠΈΠ½Π°Ρ ΡΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ECMAScript 2015 Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π² ΠΈΠΌΠ΅Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ JavaScript, ΡΡΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈΠ»ΠΈ Π½ΠΎΠ²ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, Π½Π΅ ΠΎΡΠ»ΠΈΡΠΈΠΌΡΠ΅ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΠ°Ρ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ Notepad++ ΠΈ VS Code.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ Node.js, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΡΠΎΡΡΠΎΡΡΠ΅ΠΉ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° «ㅤ», ΡΠΊΡΡΡ Π±ΡΠΊΠ΄ΠΎΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π·Π»ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΠΈΠΊΠΎΠΌ ΠΊΠΎΠ΄: app.get(‘/network_health’, async (req, res) => { const { timeout,ㅤ} = req.query; // Π½Π° Π΄Π΅Π»Π΅ ΡΠΊΠ°Π·Π°Π½ΠΎ «const { timeout,ㅤ \u3164}» const checkCommands = [ ‘ping -c 1 google.com’, ‘curl -s http://example.com/’,ㅤ // ΠΏΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΎΠΉ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ» \u3164 ];
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΡΠ΅ΡΠ΅Π· Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ timeout, Π° ΠΌΠ°ΡΡΠΈΠ² Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΡΠΉ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ. ΠΠΎ Π½Π° Π΄Π΅Π»Π΅ ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ timeout ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΅ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π° \u3164, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡΡΠ°Π²Π»Π΅Π½Π° Π² ΠΌΠ°ΡΡΠΈΠ² ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠ°Π½Π΄. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π΄Π»Ρ Π°ΠΊΡΠΈΠ²Π°ΡΠΈΠΈ Π±ΡΠΊΠ΄ΠΎΡΠ° ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π°ΡΠ°ΠΊΡΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π²ΠΈΠ΄Π° «https://host:8080/network_health?%E3%85%A4=ΠΊΠΎΠΌΠ°Π½Π΄Π°».
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΅ΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ» «ǃ» (ALVEOLAR CLICK), ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π²ΠΎΡΠΊΠ»ΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΠΊΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ «if(environmentǃ=ENV_PROD){» ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π² Node.js 14 Π²ΡΠ΅Π³Π΄Π° Π±ΡΠ΄Π΅Ρ ΠΈΡΡΠΈΠ½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½ΡΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΎΡΠ»ΠΈΡΠΈΡ, Π° ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ «environmentǃ» Π·Π½Π°ΡΠ΅Π½ΠΈΡ ENV_PROD. Π‘ΡΠ΅Π΄ΠΈ Π²Π²ΠΎΠ΄ΡΡΠΈΡ
Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ unicode-ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ «/», «−», «+», «⩵», «❨», «⫽», «꓿» ΠΈ «∗».
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru