2012-01-23 81 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()(您可以通過管道推送命令參數)。但這取決於實施。