Home > itblogs > Список “опасных” функций.

Список “опасных” функций.

March 8th, 2007

В MSDN добавили список “опасных” функций и рекомендуемых безопасных аналогов.

Правда самое главное, почему-то, засунули в середину длиннющей страницы:

Simply replacing a banned function call with a better replacement does not guarantee that the code is secure. It’s possible to misuse the replacement function, most commonly by getting the destination buffer size wrong.
Review all instances of replaced function calls, and verify that the destination buffer size is correct.

Простая замена «опасной» функции «безопасным» аналогом не гарантирует безопасности кода. Неправильное использование «безопасных» функций возможно. Наиболее часто передается неправильный размер целевого буфера. Просмотрите все случаи замены функций и проверьте, что размер целевого буфера задан верно.

Это нужно было написать большими красными буквами в самом начале. :-)

via Michael Howard.

  1. March 12th, 2007 at 02:14 | #1

    На первый взгляд это выглядит как запущенный случай NIH-синдрома.

  2. March 12th, 2007 at 02:35 | #2

    Опаньки… Оказывается это я ретроград…
    “The strcpy_s secure version of strcpy, standardised in ISO/IEC TR 24731, is so far supported by some C libraries, including Microsoft C Runtime Library.”

  3. 468
    March 12th, 2007 at 02:57 | #3

    Простите за жууткий оффтопик) Я просто уже не знаю куда обратиться :)

    Вопрос ужасен) нужно создать непрерывный на диске файл (потипу ntldr)… вариантов 2:
    1) создавать и проверять на непрерывность (как, чем??)
    2) создать сразу непрерывный (хотя наверное так невозможно)

    Подскажите в какую сторону копать? Размер файла – примерно 200-300 к..

    ну и важно чтобы файл не “ездил” по диску во время дефрагментации, достаточно ли для этого атрибута HIDDEN+SYSTEM, нужно ли постоянно держать файл? (все под Win)

    PS Решение нужно как на FAT так и на NTFS. Это точно можно сделать, но как проще и правильней…???

    Обращаюсь к Вам так как вы ближе всего к истине те к ..team ;) , СПАСИБО, и пардон на оффтопик, обещаю не злоупотреблять :)

  4. Not a kernel guy
    March 12th, 2007 at 10:56 | #4

     

    нужно создать непрерывный на диске файл (потипу ntldr)… вариантов 2:
    1) создавать и проверять на непрерывность (как, чем??)
    2) создать сразу непрерывный (хотя наверное так невозможно)

    Подскажите в какую сторону копать? Размер файла – примерно 200-300 к..

    Похоже, что нужно копать в сторону Disk Defragmenting API.

    Кроме того, на http://www.sysinternals.com раньше была утилита для дефрагментации отдельных файлов. Вполне возможно, что её исходники можно найти в сети.

    ну и важно чтобы файл не “ездил” по диску во время дефрагментации, достаточно ли для этого атрибута HIDDEN+SYSTEM, нужно ли постоянно держать файл? (все под Win)

    Это скорее от утилит дефрагментации зависит. Скорее всего нужно держать файл открытым. Но даже так нет гарантии. У Русиновича была утилитка для дефрагментации открытых файлов. Она просто дефрагментировала их во время загрузки системы.

    Может проще будет реализовать чтение файлов с NTFS? :-)

  5. Not a kernel guy
    March 12th, 2007 at 11:02 | #5

     

    Опаньки… Оказывается это я ретроград…
    “The strcpy_s secure version of strcpy, standardised in ISO/IEC TR 24731, is so far supported by some C libraries, including Microsoft C Runtime Library.”

    Какая-то доля NIH-синдрома всё-таки присутствует, я думаю. Другое дело, что лучших альтернатив как-то не видно. ISO шибко медленна на подъём.

  6. 468
    March 21st, 2007 at 03:39 | #6

    ага, спасибо за ответ!! я пропал – но именно потому, что коллега дошел сам до defragmenting api и мы это сделали.

    по поводу держать файл – скорее всего так и будем, на сторонние утилиты, которые несмотря на держание файла дефрагментируют – забьем, в принципе это скорее административно решается… (пропишем в документации)

    теперь, другая проблема. как найти номер сектора этого файла на жестком диске? в Defragmenting API можно получить VCN и LCN, но VCN это вообще не то (\

  7. 468
    March 21st, 2007 at 03:51 | #7

    рр. в третий раз пытаюсь запостить. [No valid entry. Please try again:]

    [(VCN), which is its relative offset from the beginning of the file], а [LCNs should be treated only as ordinal, or relative, numbers. There is no guaranteed mapping of logical clusters to physical hard drive sectors]…

    читать NTFS конечно можно попробовать, у нас даже есть код который это делает до загрузки Windows, но он глючит и я пока туда не лез.. В том числе потому, что это будет “хаком”, который может перестать работаь в любой момент…

    пока мы ищем поиском по сигнатуре, но это долго и не оптимально…

    Если у вас есть мысли – в каком направлении нам стоит двигаться – буду очень благодарен :)

    И большое спасибо за ответ!! :)

    PS кавычки постить нельзя оказывается

  8. Not a kernel guy
    March 21st, 2007 at 09:40 | #8

     

    как найти номер сектора этого файла на жестком диске? в Defragmenting API можно получить VCN и LCN

    Не знаю.

    читать NTFS конечно можно попробовать, у нас даже есть код который это делает до загрузки Windows, но он глючит и я пока туда не лез.. В том числе потому, что это будет “хаком”, который может перестать работаь в любой момент…

    А “делать свое чёрное дело” сразу после загрузки драйвера NTFS – не получается? Это был бы выход.

  9. 468
    March 22nd, 2007 at 01:06 | #9

    Посмотрим, идея хорошая, но пока непонятно насколько это нам подходит… большое спасибо за ответы! :)

Comments are closed.