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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π—Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Ρ…Π°ΠΊΠ΅Ρ€ΠΎΠ² ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… сСтСй». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 75

Автор ΠšΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ² Π°Π²Ρ‚ΠΎΡ€ΠΎΠ²

ВСрнСмся ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Допустим, Ρ‡Ρ‚ΠΎ впослСдствии Π±Ρ‹Π»ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ строку, Π½ΠΎ ΠΏΡ€ΠΈ этом Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ спСцификации Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π’ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ счСтС функция printf() вызываСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

printf(β€œthis is the skeleton of the string, %i”); /* note: no argument. only a format string. */

Π’ΠΎ врСмя своСго выполнСния функция Π½Π΅ Π·Π½Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΅ΠΉ Π·Π°Π±Ρ‹Π»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ спСцификации Π²Ρ‹Π²ΠΎΠ΄Π° Ρ†Π΅Π»ΠΎΠ³ΠΎ числа со Π·Π½Π°ΠΊΠΎΠΌ %i. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ строки функция printf() ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Ρ‚ Ρ†Π΅Π»ΠΎΠ΅ число ΠΈΠ· области стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈ которая Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 4 Π±Π°ΠΉΡ‚Π° ΠΏΠΎΠ΄ Π΅Π΅ стСковым Ρ„Ρ€Π΅ΠΉΠΌΠΎΠΌ. Если Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ размСщСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° доступна, Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ свою Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ Π»ΡŽΠ±Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹, оказавшиСся Π² области размСщСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΎΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΈ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ ΠΊΠ°ΠΊ Ρ†Π΅Π»ΠΎΠ΅ число. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

[ [email protected] server]$ ./format_example this is the skeleton of the string, -1073742952

ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ хотя ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf() Π½Π΅ Π±Ρ‹Π» Π·Π°Π΄Π°Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ спСцификации Π²Ρ‹Π²ΠΎΠ΄Π° Ρ†Π΅Π»ΠΎΠ³ΠΎ числа со Π·Π½Π°ΠΊΠΎΠΌ %i , Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π² Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡƒΡŽ строку Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Ρ†Π΅Π»ΠΎΠ΅ число. Ѐункция ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»Π° ΠΈΠ· области стСка, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π±Ρ‹Π» Π±Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½ Π½Π΅Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ прСдставила ΠΈΡ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ числа со Π·Π½Π°ΠΊΠΎΠΌ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС послС прСдставлСния Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ дСсятичного числа со Π·Π½Π°ΠΊΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ число -1073742952.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку своими спСцификациями Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ printf() для просмотра содСрТимого стСка, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ функция printf() Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ содСрТимоС областСй стСка Π² соотвСтствии с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌΠΈ спСцификациями Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°.

Как Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ дальшС, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ управлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ printf() Ρ‡Π΅Ρ€Π΅Π· Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΡŽ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½ΠΎΠΉ Π±Ρ€Π΅ΡˆΠΈ Π² Π·Π°Ρ‰ΠΈΡ‚Π΅. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с ошибками Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки, которая для формирования Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ смоТСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ содСрТимоС критичСских участков памяти. Π’Π°ΠΊΠΈΠ΅ участки памяти ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ пСрСзаписаны с использованиСм Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки с малопонятной спСцификациСй Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° %n. БпСцификация прСобразования %n, извСстная Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ†Π΅Π»ΠΎΠ΅, позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ число символов Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ строки Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ указатСля Π½Π° Ρ†Π΅Π»ΠΎΠ΅. Как Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ смоТСт Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ошибками Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… строк, Π±ΡƒΠ΄Π΅Ρ‚ объяснСно Π΄Π°Π»Π΅Π΅ Π²ΠΎ врСмя изучСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π°Ρ‚Π°ΠΊΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ ошибки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки.

Как ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ошибки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки?

Основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° возникновСния ошибок Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² использовании программистом Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строкС. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстныС ошибки программирования, обусловлСнныС ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки.

ΠŸΠ΅Ρ€Π²Π°Ρ ошибка состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf() Π΅ΠΉ пСрСдаСтся СдинствСнная нСпровСрСнная строка. НапримСр:

printf(argv[1]);

ΠŸΡ€ΠΈ этом СдинствСнная пСрСдаваСмая пСрСмСнная (часто пСрСдаСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки) расцСниваСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка. И Ссли Π² эту ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π±ΡƒΠ΄ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ спСцификации прСобразования, Ρ‚ΠΎ функция срСагируСт Π½Π° Π½ΠΈΡ….

[ [email protected]]$ ./format_example %i -1073742936

Часто эта ошибка ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌΠΈ программистами ΠΈΠ·-Π·Π° ΠΏΠ»ΠΎΡ…ΠΎΠ³ΠΎ знания особСнностСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ строк. Но ΠΏΠΎΡ€ΠΎΠΉ эта ошибка являСтся слСдствиСм Π»Π΅Π½ΠΈ программиста, Π½Π΅ ΡƒΠ΄ΠΎΡΡƒΠΆΠΈΠ²ΡˆΠ΅Π³ΠΎΡΡ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π²Ρ‹Π²ΠΎΠ΄Π° строки %s). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ это становится основной ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ появлСния Π±Ρ€Π΅ΡˆΠ΅ΠΉ Π² систСмС бСзопасности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠžΡ‡Π΅Π½ΡŒ часто программисты ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ функциями записи сообщСний Π² систСмный ΠΆΡƒΡ€Π½Π°Π» ΠΈ Π²Ρ‹Π΄Π°Ρ‡ΠΈ сообщСний ΠΎΠ± ошибкС. ΠŸΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π΄Π°Ρ‡ΠΈ сообщСния ΠΎΠ± ошибкС программисты-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Π½ΡƒΡ‚Ρ€ΠΈ сСбя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ printf() (ΠΈΠ»ΠΈ Π»ΡŽΠ±ΡƒΡŽ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΈΠ· сСмСйства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ printf()) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ Π΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ число Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠœΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ, ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π΅ для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ СдинствСнной строки:

error warn(errmsg);

РассмотрСнный Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ использования ошибки Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки основан Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ ошибкС. НаиболСС ΠΎΠ±Ρ‰Π΅ΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ возникновСния уязвимости Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки Π² систСмС Unix являСтся использованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog(). Ѐункция syslog() слуТит ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΌ интСрфСйсом для Π΄Π΅ΠΌΠΎΠ½Π° систСмного ΠΆΡƒΡ€Π½Π°Π»Π°. (Π”Π΅ΠΌΠΎΠ½ – скрытая ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ слуТСбная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, вызываСмая ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.) ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ syslog() для записи сообщСний ΠΎΠ± ошибкС Π² Ρ„Π°ΠΉΠ»Ρ‹ систСмного ΠΆΡƒΡ€Π½Π°Π»Π° с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΡ… ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog(), ΠΊΡ€ΠΎΠΌΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΊΠ°ΠΊ СдинствСнная строка символов, Ρ‚Π°ΠΊ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ строка с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом спСцификаций прСобразования ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ являСтся ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ сообщСния. МногиС программисты ΠΏΡ€ΠΈ использовании Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog() Π·Π°Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ»ΠΈ Π½Π΅ Π·Π½Π°ΡŽΡ‚ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ строку Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒΡΡ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ уязвимостСй связано с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠΎΠ΄Π°

error warn(errmsg);

Если Π² строкС errmsg содСрТатся Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π²ΡˆΠ΅Π³ΠΎΡΡ Π²ΠΎΠΉΡ‚ΠΈ Π² систСму, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΉ Π°Ρ‚Π°ΠΊΠΈ с использованиСм ошибок Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки.

Как ΡƒΡΡ‚Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки?

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

Для администраторов ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅ΠΉ Π»ΠΈΠ½ΠΈΠ΅ΠΉ являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎΠ³ΠΎ уровня бСзопасности своих систСм. Для достиТСния этого Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ всС Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° всС лишниС сСрвисы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.

Майк Π€Ρ€Π°Π½Ρ‚Ρ†Π΅Π½ (Mike Frantzen) ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ вылизывания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с Ρ†Π΅Π»ΡŒΡŽ максимального устранСния Π½Π΅Π΄ΠΎΠ΄Π΅Π»ΠΎΠΊ, которая позволяСт администраторам ΠΈ программистам ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π°Ρ‚Π°ΠΊΠΈ с использованиСм ошибок Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° основана Π½Π° сравнСнии числа ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ printf(), с числом спСцификаций Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строкС. Π­Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Format Guard Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π² Immunix, ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· бСзопасных дистрибутивов ОБ Linux.

Π—Π°Π°Ρ€Ρ…ΠΈΠ²ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΡƒ Майка Π€Ρ€Π°Π½Ρ‚Ρ†Π΅Π½Π° Π² спискС рассылки Bugtraq ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ адрСсу www.securityfocus.com/archive/1/72118. Format Guard находится ΠΏΠΎ адрСсу www.immunix.org/formatguard.html.

Бпособы использования ошибок Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки для Π°Ρ‚Π°ΠΊΠΈ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ для Π°Ρ‚Π°ΠΊΠΈ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚Ρ€Π΅Ρ… основных Ρ†Π΅Π»Π΅ΠΉ. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ процСсса вслСдствиС Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ доступа ΠΊ памяти. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΠΎΡ‚ΠΊΠ°Π· Π² обслуТивании. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ строки Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π°Ρ‚Π°ΠΊΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ процСсса. И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, Π²-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Π·Π»ΠΎΡƒΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Ρ‡Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌ ΠΊΠΎΠΌΠ°Π½Π΄.

...

Ошибки ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π°

ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡƒΡ„Π΅Ρ€Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ошибок Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ строки

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

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