Я работаю над веб-приложением, в котором есть несколько вызовов API, которые отправляют аргументы для операций командной строки. Например, (используя jquery) вызов API, например:
$.get('/api',{
function:function_1,
data:data
},funcion(){},'text')
может выполнить командную строку как:
php a.php data
в этом случае, если содержимое данных "whatever;rm -rf *;"
, будут выполнены две команды
php a.php watever;
rm -rf *;
И я не хочу рисковать.
Моя проблема не в том, чтобы определить, является ли символ частью строки данных, моя проблема в том, чтобы узнать, какие символы мне нужно искать?
Я добавляю список метасимволов команд оболочки. Укажите, какие символы являются рискованными и какие комбинации символов (если таковые имеются) являются рискованными.
Примечание:
Взято из: http://www.fmrib.ox.ac.uk/fslcourse/unix_intro/shell.html
Мета-символы оболочки включают в себя:
\ / <>! $% ^ & * | {} [] "'` ~;
ПРИМЕЧАНИЕ 2. Могут быть и другие символы, пожалуйста, если вы знаете, что кто-то еще добавил его или оставил комментарий, я его добавлю.
ПРИМЕЧАНИЕ 3. Моя проблема похожа на то, что может произойти с внедрением SQL. когда кто-то добавляет скрытые запросы в текстовые поля поиска, но в моем случае проблема заключается в командах оболочки. Чтобы предотвратить инъекцию SQL, вы можете посмотреть на это .