Как предотвратить внедрение SQL при выполнении оператора MySQL через оболочку? - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть этот код:

printf '%s' 'Enter deployment request ID: '
read request_id
[[ $request_id ]] || { printf '%s' 'Request ID is required' >&2; exit 2; }
...
mysql -h "$db_host" -u app_user --database dep_db -p -sNE "
    update dep_requests set
      state='FAILED', end_time=sysdate(), message='Cancelled manually'
    where id='$request_id' limit 1;
"

Поскольку request_id, который является строкой, принимается как пользовательский ввод, это может привести к внедрению SQL.Каков наилучший способ сделать этот код свободным от этой уязвимости?

Возможно, я могу подтвердить ввод с помощью регулярного выражения.Есть ли лучшие способы?

...