我有这个密码:
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注入。使此代码免于该漏洞的最佳方法是什么?
我可以用正则表达式匹配验证输入。有更好的方法吗?
1条答案
按热度按时间drnojrws1#
有些人建议使用set语法:
这个
$request_id
是对bash变量的引用。如果将其粘贴到双引号bash字符串中,它应该可以工作。既然我们还在把字符串粘在一起:如果用
\'
在$request_id
,我认为攻击者无法逃脱。例如。:request_id="${request_id//\'/\\\'}"