Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«19 смСртных Π³Ρ€Π΅Ρ…ΠΎΠ², ΡƒΠ³Ρ€ΠΎΠΆΠ°ΡŽΡ‰ΠΈΡ… бСзопасности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 7

Автор Дэвид Π›Π΅Π±Π»Π°Π½ΠΊ

β–‘ ΠŸΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ встраиваСмыми Π² компилятор срСдствами Π·Π°Ρ‰ΠΈΡ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„Π»Π°Π³ΠΎΠΌ /GS ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ProPolice.

β–‘ ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ пСрСполнСния Π±ΡƒΡ„Π΅Ρ€Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ DEP ΠΈ Π Π°Π₯.

β–‘ УяснитС, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ, ΠΈ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΈΡ… бСзопасным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

НС рСкомСндуСтся

β–‘ НС Π΄ΡƒΠΌΠ°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ компилятор ΠΈ ОБ всС ΡΠ΄Π΅Π»Π°ΡŽΡ‚ Π·Π° вас, это всСго лишь Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ срСдства Π·Π°Ρ‰ΠΈΡ‚Ρ‹.

β–‘ НС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ нСбСзопасныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ….

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ

β–‘ Об установкС послСднСй вСрсии компилятора C/C++, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΊΠΎΠ΄ Π½ΠΎΠ²Ρ‹Π΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π·Π°Ρ‰ΠΈΡ‚Ρ‹.

β–‘ О постСпСнном ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ нСбСзопасных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· старых ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ.

β–‘ Об использовании строк ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π½Ρ‹Ρ… классов ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘++ вмСсто примСнСния Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π‘ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со строками.

Π“Ρ€Π΅Ρ… 2. Ошибки, связанныС с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкой

Π’ Ρ‡Π΅ΠΌ состоит Π³Ρ€Π΅Ρ…

Π‘ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкой связан Π½ΠΎΠ²Ρ‹ΠΉ класс Π°Ρ‚Π°ΠΊ, ΠΏΠΎΡΠ²ΠΈΠ²ΡˆΠΈΡ…ΡΡ Π² послСдниС Π³ΠΎΠ΄Ρ‹. Одно ΠΈΠ· ΠΏΠ΅Ρ€Π²Ρ‹Ρ… сообщСний Π½Π° эту Ρ‚Π΅ΠΌΡƒ прислал Π›Π°ΠΌΠ°Π³Ρ€Π° Аграмал (Lamagra Arga–mal) 23 июня 2000 Π³ΠΎΠ΄Π° (www.securityfocus.com/archive/1/66842). ΠœΠ΅ΡΡΡ†Π΅ΠΌ ΠΏΠΎΠ·ΠΆΠ΅ Паскаль Π‘ΡƒΡˆΠ°Ρ€Π΅Π½ (Pascal Bouchareine) Π΄Π°Π» Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ пояснСниС (www.securityfocus.eom/archive/l/70552). Π’ Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π½Π½Π΅ΠΌ сообщСнии ΠœΠ°Ρ€ΠΊΠ° Π‘Π»Π΅ΠΌΠΊΠΎ (Mark Slemko) (www.securityfocus.com/archive/1 /10383) Π±Ρ‹Π»ΠΈ описаны основныС ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ошибки, Π½ΠΎ ΠΎ возмоТности Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ€Π΅Ρ‡ΠΈ Π½Π΅ Π±Ρ‹Π»ΠΎ.

Как ΠΈ Π² случаС ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, относящихся ΠΊ бСзопасности, ΡΡƒΡ‚ΡŒ ошибки Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² отсутствии контроля Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‰ΠΈΡ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C/C++ такая ошибка позволяСт произвСсти запись ΠΏΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌΡƒ адрСсу Π² памяти, Π° опаснСС всСго Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ этом Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°ΡŽΡ‚ΡΡ сосСдниС Π±Π»ΠΎΠΊΠΈ памяти. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±ΠΎΠΉΡ‚ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ стСка ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ нСбольшиС участки памяти. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈ Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° форматная строка читаСтся ΠΈΠ· Π½Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ довСрия источника, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΠΎΠΌ, Π½ΠΎ это свойствСнно скорСС систСмам UNIX ΠΈ Linux. Π’ Windows Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ строк ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ хранятся Π²Π½ΡƒΡ‚Ρ€ΠΈ исполняСмого Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π² динамичСски Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… рСсурсов (рСсурсных DLL). Если ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ основной исполняСмый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ Ρ€Π΅ΡΡƒΡ€ΡΠ½ΡƒΡŽ DLL, Ρ‚ΠΎ ΠΎΠ½ способСн провСсти ΠΏΡ€ΡΠΌΠΎΠ»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Π°Ρ‚Π°ΠΊΡƒ, ΠΈ Π½Π΅ эксплуатируя ошибки Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкС.

Но ΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках Π°Ρ‚Π°ΠΊΠΈ Π½Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΡƒΡŽ строку ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ источником ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Ρ… нСприятностСй. Бамая очСвидная Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ происходит, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΡ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… условиях ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Π°ΠΊΡƒ с кросс–сайтовым сцСнариСм ΠΈΠ»ΠΈ Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ΠΌ SQL–команд, Ρ‚Π΅ΠΌ самым Π·Π°ΠΏΠΎΡ€Ρ‚ΠΈΠ² ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π² Π΄Π°Π½Π½Ρ‹Π΅.

ΠŸΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€Π΅Ρ…Ρƒ языки

Π‘Π°ΠΌΡ‹ΠΌΠΈ опасными Π² этом ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ языки Π‘ ΠΈ Π‘++. УспСшная Π°Ρ‚Π°ΠΊΠ° ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ исполнСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΈ Ρ€Π°ΡΠΊΡ€Ρ‹Ρ‚ΠΈΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… языках ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ удаСтся, Π½ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π²Ρ‹ΡˆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²ΠΈΠ΄Ρ‹ Π°Ρ‚Π°ΠΊ. Π‘ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° Perl Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ случится, Ссли ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ подсунСт спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Π½ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ уязвимой, ΠΊΠΎΠ³Π΄Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Π΅ строки ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠ³ΠΎ источника Π΄Π°Π½Π½Ρ‹Ρ….

Как происходит Π³Ρ€Π΅Ρ…ΠΎΠΏΠ°Π΄Π΅Π½ΠΈΠ΅

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ хранСния – это довольно слоТноС Π΄Π΅Π»ΠΎ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… языках программирования Π΅ΡΡ‚ΡŒ срСдства для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ. Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ описываСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкой. По сущСству, это мини–программа Π½Π° ΠΎΡ‡Π΅Π½ΡŒ спСциализированном языкС, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ для описания Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Однако ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ – ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΡƒΡŽ строку ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ, Π½Π΅ Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌ довСрия. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΡΡƒΠ½ΡƒΡ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ строку, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½Π° языкС C/C++ это особСнно рискованно, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ ΡΠΎΠΌΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ мСста Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкС ΠΎΡ‡Π΅Π½ΡŒ слоТно, Π° ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½Ρ‹Π΅ строки Π² этих языках ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ опасныС спСцификаторы (ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго %ΠΏ), ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках.

Π’ C/C++ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΡƒΠΊΠ°Π·Π°Π² Π² качСствС послСднСго Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΎΡ‚ΠΎΡ‡ΠΈΠ΅ (…). ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ такая функция Π½Π΅ Π·Π½Π°Π΅Ρ‚, сколько Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ. К числу Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ числом Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² относятся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сСмСйства printf: printf, sprintf, snprintf, fprintf, vprintf ΠΈ Ρ‚. Π΄. Π’Π° ΠΆΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° свойствСнна функциям для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ символами. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

...

#include <stdio.h>

int main(int argc, char* argv[])

{

if(argc > 1)

printf(argv[1]);

return 0;

}

Π˜ΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ простая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°. Однако посмотрим, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π²Π²Π΅Π΄Π΅Ρ‚ что–то Π±Π΅Π·ΠΎΠ±ΠΈΠ΄Π½ΠΎΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Hello World. Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС: Hello World. Но Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° строку %Ρ… %Ρ…. Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² стандартном ΠΎΠΊΠ½Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ (cmd.exe) ΠΏΠΎΠ΄ Windows Π₯Π , Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ:

...

E:\projects\19_sins\format_bug>format_bug.exe Β«%x %xΒ»

12ffc0 4011e5

Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС ΠΈΠ»ΠΈ ΠΏΡ€ΠΈ использовании Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΊΠΎΠΌΠ°Π½Π΄ для Π²Π²ΠΎΠ΄Π° Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ строки Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ слСгка ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ синтаксис, ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, вСроятно, Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ. Для удобства ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² shell–сцСнарий ΠΈΠ»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ».

Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎβ–‘ Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π° форматная строка, вмСстС с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ слСдовало Π±Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π΅Ρ‰Π΅ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ ΠΈΡ… Π² стСк ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВстрСтив спСцификатор %Ρ…, printf ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Ρ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π° ΠΈΠ· стСка. НСтрудно ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сСбС, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π±ΠΎΠ»Π΅Π΅ слоТной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ Π² стСкС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡΠ΅ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ смог Π±Ρ‹ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΆΠ΅ случаС Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ адрСс ΠΊΠ°Π΄Ρ€Π° стСка (0xl2ffc0), Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт адрСс, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π²Π΅Ρ€Π½Π΅Ρ‚ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ функция main(). Π’ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ – ваТная информация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ сумСл нСсанционированно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ вопрос: «Как ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ошибкой ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠΉ строкой для записи Π² ΠΏΠ°ΠΌΡΡ‚ΡŒβ–‘Β» БущСствуСт довольно Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ спСцификатор %ΠΏ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ число Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… ΠΊ настоящСму ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ Π±Π°ΠΉΡ‚ΠΎΠ² Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² качСствС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΅ΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. Π’ΠΎΡ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ способ Π΅Π³ΠΎ примСнСния:

...

unsigned int bytes;

printf("%s%n\n", argv[1], &bytes);

printf("Π”Π»ΠΈΠ½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… составляла %d символов\n, bytes");

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ:

...

E:\projects\19_sins\format_bug>format_bug2.exe Β«Some random inputΒ»

Some random input

Π”Π»ΠΈΠ½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… составляла 17 символов

На ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅, Π³Π΄Π΅ Π΄Π»ΠΈΠ½Π° Ρ†Π΅Π»ΠΎΠ³ΠΎ составляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°, спСцификатор %ΠΏ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°, Π° спСцификатор %hn – Π΄Π²Π° Π±Π°ΠΉΡ‚Π°. ΠŸΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ адрСс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π² Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ стСка, Π° ΠΏΠΎΡ‚ΠΎΠΌ, манипулируя спСцификаторами ΡˆΠΈΡ€ΠΈΠ½Ρ‹, Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ число Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² Ρ€Π°Π²Π½ΡΠ»ΠΎΡΡŒ числовому Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ адрСса.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Π‘ΠΎΠ»Π΅Π΅ подробная дСмонстрация шагов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ эксплойта, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Π³Π»Π°Π²Π΅ 5 ΠΊΠ½ΠΈΠ³ΠΈ Michael Howard ΠΈ David Π‘. LeBlanc Β«Writing Secure Code, Second EditionΒ» (Microsoft Press, 2002) ΠΈΠ»ΠΈ Π² ΠΊΠ½ΠΈΠ³Π΅ Holesby Jack Koziol, David Litchfield, Dave Artel, Chris Anley, Sinan Β«noirΒ» Eren, Neel Mehta and Riley Hassell Β«The Shellcoder\'s HandbookΒ» (Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ no shell–кодам) (Wiley, 2004).

Пока достаточно ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π·Π° аксиому, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊΡƒ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΡƒΡŽ строку Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π° C/C++, Ρ‚ΠΎ Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΎΠ½ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π΅Ρ‚, ΠΊΠ°ΠΊ Π·Π°ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ эту ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π΅ΠΌΡƒ ΠΊΠΎΠ΄. ОсобСнно нСприятно, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ запуском Ρ‚Π°ΠΊΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС стСка ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊΠΈ Π½Π° Π»Π΅Ρ‚Ρƒ. На самом Π΄Π΅Π»Π΅ Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° Π°Π²Ρ‚ΠΎΡ€ дСмонстрировал эту Π°Ρ‚Π°ΠΊΡƒ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ, Π΅ΠΌΡƒ попался Π½Π΅ Ρ‚ΠΎΡ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ эксплойт разрабатывался, поэтому Π°Ρ‚Π°ΠΊΠ° Π½Π΅ сработала. Но вслСдствиС ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ гибкости этой Π°Ρ‚Π°ΠΊΠΈ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ ΠΈ Π²Π·Π»ΠΎΠΌΠ°Ρ‚ΡŒ уязвимоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π³Π»Π°Π·Π°Ρ… Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ Π΄Ρ€ΡƒΠ³ΠΈΡ… языков эквивалСнт спСцификатора Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° %ΠΏ Π½Π΅ поддСрТиваСтся, поэтому Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ Π½Π΅ смоТСт Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ своСму Π²Ρ‹Π±ΠΎΡ€Ρƒ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ всС Ρ€Π°Π²Π½ΠΎ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ½ΠΊΠΈΠ΅ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ этой Π°Ρ‚Π°ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ уязвимы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки. Если ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΡƒΡŽ строку для Π²Ρ‹Π²ΠΎΠ΄Π° Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΠΈΠ»ΠΈ Π² Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎ сумССт ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΈΠ»ΠΈ ΡΠ±ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ с Ρ‚ΠΎΠ»ΠΊΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ». ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… Π·Π°ΡΠ»ΡƒΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ довСрия, Π° Ссли это ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ, Ρ‚ΠΎ ошибки Π² синтаксичСском Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π΅ ΠΌΠΎΠ³ΡƒΡ‚ всС ΠΆΠ΅ привСсти ΠΊ исполнСнию ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°. Π‘ этим связана ΠΈ другая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° – запись Π² Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… символов. Π’Π°ΠΊ, символ забоя ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для стирания Π΄Π°Π½Π½Ρ‹Ρ…, Π° символы ΠΊΠΎΠ½Ρ†Π° строки ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ΡŒ слСды Π°Ρ‚Π°ΠΊΠΈ.