我正在开发一个Web应用程序,它有一些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 *;
我不想冒这个风险。
我的问题是没有检测到某个字符是数据字符串的一部分,我的问题是知道应该查找哪些字符?
我正在添加一个shell命令元字符列表。请指定哪些字符有风险以及哪些字符组合(如果有)有风险。
注意: 取自:http://www.fmrib.ox.ac.uk/fslcourse/unix_intro/shell.html
shell元字符包括:
\ /< > ! $%^& * | {} []“'〜;
注意2:如果您知道其他字符,请添加或评论,我可能会添加其他字符。
注3:我的问题类似于sql注入可能发生的问题。当有人在搜索文本框中添加隐藏的查询时,但在我的情况下,问题在于shell命令。为防止sql注入,您可以查看this。
答案 0 :(得分:3)
您最好尝试在输入中定义允许的字符,并检查输入是否仅包含那些,即“白名单”方法。
答案 1 :(得分:2)
这正是escapeshellarg
的用途
http://www.php.net/manual/en/function.escapeshellarg.php