2012-01-23 43 views
4

我有一个脚本调用bash脚本来做一些处理,但是脚本使用用户输入的数据调用bash脚本。PHP文件注入?

我想知道是否有办法确保这个人(这是一个文件上传)不会像;cd /;rm -rf *追加到文件的末尾。或者其他任何类似的东西。普通的MYSQL注入方法会起作用吗?有更好的选择吗?

+0

正常的sql注入**不会停止**这。 –

+1

编写您自己的脚本语言,只提供您需要公开的功能。 –

+0

F有什么与MySQL有关呢? – Christian

回答

5

能够注入shell命令将是... shell命令注入,既不是文件也不是SQL注入。为了确保反对它,使用escapeshellarg

exec('bash bash-script ' . escapeshellarg($userInput)); 
1

你检查escapeshellcmd()将和escapeshellarg()还是我错过了点?

0

保护这个过程是一个双向过程:

  1. 确保输入满足某些标准(特别是在最大的类型)
  2. 确保输入不能泄漏和改变过程本身

假设我将一个数字传递给程序...

$num = $_GET['num']; // get the input 
$num = (int)$_GET['num']; // ensure it is an integer 
$num = max($num, 0); // ensure it is at least 0 
$num = min($num, 800); // ensure it is at most 800 

$num = escapeshellarg($num); // this is overkill at this point, but you never know 

exec('command '.$num); 

A s以上建议,你也可以有自己的小语言要做到这一点,但...

  1. 它可能仍然是脆弱的
  2. 它可能是矫枉过正一个简单的任务
  3. 它只是一个高级版本过滤系统

最后的,还有另一种选择。有些函数接受命令和参数作为单独的参数,例如popen()(您可以通过管道推送命令参数)。但这取决于实施。