обнаружение опасных метасимволов командной строки Unix - PullRequest
0 голосов
/ 01 ноября 2011

Я работаю над веб-приложением, в котором есть несколько вызовов API, которые отправляют аргументы для операций командной строки. Например, (используя jquery) вызов API, например:

$.get('/api',{
function:function_1,
data:data
},funcion(){},'text')

может выполнить командную строку как:

php a.php data

в этом случае, если содержимое данных "whatever;rm -rf *;", будут выполнены две команды

  1. php a.php watever;
  2. rm -rf *;

И я не хочу рисковать.

Моя проблема не в том, чтобы определить, является ли символ частью строки данных, моя проблема в том, чтобы узнать, какие символы мне нужно искать?

Я добавляю список метасимволов команд оболочки. Укажите, какие символы являются рискованными и какие комбинации символов (если таковые имеются) являются рискованными.


Примечание: Взято из: http://www.fmrib.ox.ac.uk/fslcourse/unix_intro/shell.html

Мета-символы оболочки включают в себя:

\ / <>! $% ^ & * | {} [] "'` ~;

ПРИМЕЧАНИЕ 2. Могут быть и другие символы, пожалуйста, если вы знаете, что кто-то еще добавил его или оставил комментарий, я его добавлю.

ПРИМЕЧАНИЕ 3. Моя проблема похожа на то, что может произойти с внедрением SQL. когда кто-то добавляет скрытые запросы в текстовые поля поиска, но в моем случае проблема заключается в командах оболочки. Чтобы предотвратить инъекцию SQL, вы можете посмотреть на это .

Ответы [ 2 ]

3 голосов
/ 01 ноября 2011

Вам гораздо лучше попытаться определить, какие символы разрешены на входе, и проверить, что вход содержит только те символы, т. Е. Подход "белого списка".

2 голосов
/ 01 ноября 2011

Это именно то, для чего escapeshellarg.
http://www.php.net/manual/en/function.escapeshellarg.php

...