Как отследить откуда запускали скрипт?

1 234
lutskboy
На сайте с 22.11.2013
Offline
172
#21
LEOnidUKG #:

Не понимаю... так у вас это всё под контролем или это какая-то общедоступная программа. От кого нужно скрывать программу?! От самого себя же ?

Кто узнает, что надо вводить:

Другие пользователи на сервере, которые не подкотрольны вам?

script.php  открытый код. запускает программу myscript

нужно сделать так что запуск программы был именно из под  script.php и никаким другим образом

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#22
Как по мне надо делать прослойку в виде BASH скрипта, который будет проверять и пользователя под которым будет запуск и метод запуска.
✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#23
Но как по мне это всё гиблое дело. Надо менять подход к таким вещам и делать какой-то API интерфейс с ключами.
C
На сайте с 22.08.2012
Offline
104
#24
lutskboy #:

немного уточню. мне нужно запускать программу  именно с сайта  http://site.ru/script.php и файла  script.php . а не с консоли bash sh ...

Просто удлинили проблему на 1 шаг
1)  вызвали скрипт с токеном сгенерированным по своему алгоритму (в примере делаем примитивные одноминутный токен - умножаем текущий час 9 на минуту 21)

curl http://site.ru/script.php?token=189

2) В скрипте вызываем программу и передаём токен

if (isset($_GET['token'])) {
  $token = escapeshellarg($_GET['token']);
  shell_exec("/path/to/your_program $token");
}

3) Вычисляем токен и выполняем / не выполняем код

int main(int argc, char *argv[]) {
    //    без аргументов завершаем с ошибкой
    if (argc != 2) {
      return 1;
    }
    //    получаем время
    time_t now = time(NULL);
    struct tm *tm_struct = localtime(&now);
    int hour = tm_struct->tm_hour;
    int minute = tm_struct->tm_min;

    // Вычисляем токен и проверяем его
    if (hour * minute == atoi(argv[1]) {
        // выполняем свой код
    } else return 2; //    с неверным токеном завершаем с ошибкой

    return 0;
}
Artisan
На сайте с 04.03.2005
Offline
353
#25

Советникам про токены было бы полезно сначала читать тему, я это советовал в самом начале темы, и начальник темы пояснил, почему для его задачи такой способ не годится. Можно решить задачу криво, но должно работать. Переносим вызывающий скрипт из каталога для страниц в каталог для CGI программ, и оформляем запуск вызывающего скрипта как запуск CGI программы.

Было

http://domain/script.php

<?php

exec("softina");

?>


Надо

http://domain/cgi-bin/script.php

#!/usr/local/bin/php

exec("softina");


Ставим вызывающему скрипту setuid права доступа, чтобы вызывающий скрипт исполнялся не от пользователя HTTP сервера, а от пользователя хозяина вызывающего скрипта.

$ chmod 6755 cgi-bin/script.php

И проверяем в вызываемом скрипте, какой пользователь исполняет вызываемый скрипт.

if (getuid() != userid) exit(failure);

Надо выбрать годную getuid() функцию из php зоопарка на эту тему.

Такое решение не защитит от запуска кем попало вызывающего скрипта, но защитит от вызова откуда попало вызываемого скрипта.

www.leak.info / ДАРОМ линки конкурентов и забытых доменов
C
На сайте с 22.08.2012
Offline
104
#26
Artisan #:

начальник темы пояснил, почему для его задачи такой способ не годится

Вероятно я туплю, но кроме открытости php-кода я не вижу претензий от автора.
Однако, чем открытость кода

if (isset($_GET['token'])) {
  $token = escapeshellarg($_GET['token']);
  shell_exec("/path/to/your_program $token");
}

может скомпрометировать алгоритм формирования токена?

Artisan
На сайте с 04.03.2005
Offline
353
#27
chaturanga #:
формирования токена?

Ваш способ зависит от получения внешнего токена, поэтому не решает задачу в общем случае.

lutskboy
На сайте с 22.11.2013
Offline
172
#28
chaturanga #:
может скомпрометировать алгоритм формирования токена?

да. я вот позавчера тему создал https://searchengines.guru/ru/forum/1096624

токен можно перехватить

C
На сайте с 22.08.2012
Offline
104
#29
lutskboy #:

да. я вот позавчера тему создал https://searchengines.guru/ru/forum/1096624

токен можно перехватить

Так токен должен быть одноразовый. Его перехват ничего не даёт.

lutskboy
На сайте с 22.11.2013
Offline
172
#30
chaturanga #:
Так токен должен быть одноразовый

вроде как не одноразовый. а у него есть время жизни. за етот промежуток времени можно его использовать

1 234

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий