Цитата(svss @ Aug 20 2011, 00:00)

К сожалению ни аффтар статьи, ни половина дискутёров не разобрались
с сутью безопасности кода.
Вы также входите в число этих дискутеров.
Цитата(svss @ Aug 20 2011, 00:00)

Нуль на конце плох не тем, что сервис "упадёт", а тем, что злоумышленник
может незаметно внедрить свой малварь на место того нуля.
Это называется "слышал звон, да не знаю где он". А если строка будет начинаться с длины, то злоумышленник не может незаметно ее заменить?
Вообще-то суть безопасности кода заключается в некоторых функциях, работающих со строками, которым не передается размер буфера, в которую надо поместить строку. Если буфер будет недостаточным (или злоумышленник передаст достаточно длинную строку), то она затрет память, находящуюся за пределами строки. Если этот буфер для строки выделен в стеке, то подойдя к процессу творчески можно с передаваемой строке передать свой код и затереть адрес возврата таким образом, чтобы управление передалось на этот код.
Но к null-terminated строкам это имеет весьма отдаленное отношение - программист должен проверять поступаемые данные. Это все равно, что обвинять Си в том, что при обращении к массиву он не проверяет, не выходит ли индекс за его пределы.
Сообщение отредактировал 777777 - Aug 22 2011, 06:06