2014-02-14 66 views
0

我想執行這個代碼命令注入通過執行mount命令

Process process = new ProcessBuilder().command("mount").start(); 
     process.waitFor(); 

找出SD卡位置,然後事後檢查,如果它是由vold的,如果文件系統是VFAT管理。

我的問題是,如果無論如何這個代碼可以合併,併成爲Android的命令注入的候選人。

夫妻點從我身邊。

它不是用戶輸入,所以在這種情況下將沒有命令注入。整個Android OS環境是否可以改變,使得mount命令可能會被濫用?

歡呼聲, Saurav


確定。目前我正在讀的/ proc /支架代替mount命令。

這是一個很好的方法。

引用該解決方案 http://renzhi.ca/2012/02/03/how-to-list-all-sd-cards-on-android/ How can I get the list of mounted external storage of android device

代碼如下

reader = new BufferedReader(new FileReader("/proc/mounts")); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      // Output the line of output from the mount command 
      logger.debug(" {}", line); 

      if (line.startsWith("/dev/block/vold/")) { 

任何人都可以請,如果這是應該做的正確的方法是免費的任何安全問題。

歡呼聲, Saurav

+1

無論如何,這是一種劣質的方法;你應該簡單地將/ proc/mounts作爲一個文本文件讀取,避免產生一個子進程 - 通常最好避免它,因爲它是一個相當重量級的操作,通常與Android的流程管理和整體設計理念不相稱。 –

+0

感謝Chris的回覆。這是最好的解決方案http://stackoverflow.com/questions/9340332/how-can-i-get-the-list-of-mounted-external-storage-of-android-device/19982338#19982338? – saurav

回答

1

正如你所說的,只要你沒有任何用戶輸入你從這種注射液的安全。

唯一可能遇到麻煩的情況是如果掛載二進制文件被一些惡意二進制文件替換。要遇到這種情況,用戶必須已經植根設備並用自定義ROM取代了操作系統。

我想你可以認爲mount命令應該正常運行。

+0

感謝synapticvoid的迴應。在這種情況下,我可以以某種方式阻止或提供掛載二進制文件的實際路徑? – saurav

+1

不,你無法阻止它,它完全取決於用戶。提供完整的路徑是有風險的,有些設備可以將它放在/ system/xbin或/ system/bin甚至system/sbin中。你只能假定二進制文件存在並且正常工作! – synapticvoid

+0

這不是事實。您可以明確指定路徑,但必須確保它在那裏。這可以通過提供自己的。但是,如果沒有理由開始執行外部命令,那麼這樣做是毫無意義的 - 可以在應用程序進程中執行與mount命令的查詢形式相同的操作。 –