The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Уязвимость BatBadBut, затрагивающая стандартные библиотеки различных языков программирования, opennews (ok), 10-Апр-24, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


73. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +1 +/
Сообщение от Аноним (73), 11-Апр-24, 17:11 
Господа, приведите пожалуйста пример как на С правильно обрабатывать аргументы командной строки. Как дорвусь до компьютера напишу как это делаю я — сможете раскритиковать, но напишите как правильно это делать пожалуйста.
Ответить | Правка | Наверх | Cообщить модератору

74. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от Аноним (74), 11-Апр-24, 17:17 
> Господа, приведите пожалуйста пример как на С правильно обрабатывать аргументы командной
> строки. Как дорвусь до компьютера напишу как это делаю я —
> сможете раскритиковать, но напишите как правильно это делать пожалуйста.

man 3 getopt

Ответить | Правка | Наверх | Cообщить модератору

76. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +1 +/
Сообщение от Аноним (73), 11-Апр-24, 22:18 
А чем getopt безопаснее? Тем более что у него только определённое применение. Разве возможно с помощью getopt обработать данные с одинаковыми названиями? Ну или если вдруг последовательность имеет значение. Более того, обрабатывает ли он в целом аргументы на такие проблемы как специальные символы?
Насколько я вижу исходный код - вроде не похоже.
https://codebrowser.dev/glibc/glibc/posix/getopt.c.html
Ответить | Правка | Наверх | Cообщить модератору

77. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от Аноним (74), 11-Апр-24, 22:34 
> А чем getopt безопаснее?

Поищи CVE в getopt, если тебе нужен ответ. Помню пару лет назад было что-то подобное.

> Тем более что у него только определённое применение.

типичное.

> Разве возможно с помощью getopt обработать данные с одинаковыми названиями?

колхоз. отрефакторь интерфейс, используй getsubopt(3).

> Ну или если вдруг последовательность имеет значение.

см. предыдущий ответ.

> Более того, обрабатывает ли он в целом аргументы на такие проблемы как специальные символы?

чойта у тя мисформулировано. "обрабатывает ... аргументы на ... проблемы"?
Там char*, обрабатывай чем хочешь. Вдруг тебе нужно спецсимвол передать, типа $'\n', или обработать  аргумент на соответстие шаблону, getopt(3) и ко это не волнует, он делает для чего предназначен.

> Насколько я вижу исходный код - вроде не похоже.

не вы%бивайся.

Ответить | Правка | Наверх | Cообщить модератору

78. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от Аноним (78), 11-Апр-24, 23:19 
Ну вот так: echo hello & \e\c\h\o wo\rld \n
я получу что-то такое:
[2] 15915
world n
[1]   Done                    echo hello
hello
А вот так: echo hello \& \e\c\h\o wo\rld \n
получается такое:
hello & echo world n
[2]+  Done                    echo hello
То есть в консоле символ & почему-то не экранируется а \ экранируется как \\, но самим echo не выводится. Я в целом не С программист, но иногда использую дома и не понимаю почему символ & не экранируется? В целом в Linux та же может быть проблема при вызове system. И вот getopt мне кажется в этой проблеме никак не поможет.
Ответить | Правка | Наверх | Cообщить модератору

79. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от Аноним (74), 11-Апр-24, 23:46 
> Я в целом не С программист

тебе надо не С, а какой-нибудь учебник по юникс-лайк системам для чайников для начала. Шеллы там, пайпы, {fore,back}ground процессы, и т.д. И потом уже С.

Ответить | Правка | Наверх | Cообщить модератору

75. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от Аноним (73), 11-Апр-24, 22:08 
Как-то так:
int main(int количествоАргументов, char *аргументы[])
{
    if (аргументы != NULL)
    {
        for (int и=1; и < количествоАргументов; и++)
        {
            if (аргументы[и] != NULL)
            {
                const char * аргумент = аргументы[и];
...
В итоге получается warning: unsafe buffer access [-Wunsafe-buffer-usage]|
Ответить | Правка | К родителю #73 | Наверх | Cообщить модератору

81. "Уязвимость BatBadBut, затрагивающая стандартные библиотеки р..."  +/
Сообщение от n00by (ok), 12-Апр-24, 12:32 
> Как-то так:
> int main(int количествоАргументов, char *аргументы[])
> {
>     if (аргументы != NULL)
>     {
>         for (int и=1; и
> < количествоАргументов; и++)
>         {

А где "аргументы" могут быть NULL? Вот требование стандарта:

If the value of argc is greater than zero, the array members argv[0] through argv[argc-1]
inclusive shall contain pointers to strings, which are given implementation-defined values
by the host environment prior to program startup.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру