簡體   English   中英

有沒有一種方法可以“轉義” Linux命令?

[英]Is there a way to “escape” linux commands?

我正在提供一項服務,允許用戶將文件發布到我的Web服務器,然后將文件(經過幾次檢查)復制到圖像服務器。 Web服務器和圖像服務器之間進行通信的主要方式是scp。 但是,我也想維護用戶文件名,所以看起來像這樣:

  1. 用戶將其文件發布到Web服務器
  2. Web服務器檢查文件是否受支持
  3. Web服務器檢查文件是否小於文件大小限制
  4. Web服務器說“確定”,然后嘗試發送到圖像服務器
  5. Web服務器運行(“ scp” +文件路徑+“ root @ imageServer:〜/ images”)
  6. 圖像服務器接收文件,並准備根據請求將文件發送給用戶(該文件夾是公用的,將由nginx提供)

這里最危險的部分是scp命令。 我不是安全專家,但是有沒有辦法像數據庫可以注入SQL一樣劫持此命令? 如果有人將其文件命名為惡意文件怎么辦。 有沒有辦法安全地將文件名加入腳本? 要安全地“逃避”命令?

我正在對Web服務器使用express(node.js)。 有沒有其他方法可以將文件從Web服務器發送到簡單的Ubuntu安裝,而無需使用Unix命令或為圖像服務器編寫REST API? 是否存在,那么我可能根本不需要“逃避”

順便說一句,我之所以選擇將圖像服務器和Web服務器分開是因為我想將來擴展應用程序。 例如,如果有10台Web服務器,而沒有中央圖像服務器,那么如果文件不在您請求的Web服務器上,則將無法檢索文件。

您可以運行無殼外部命令使用(因此沒有問題與shell元字符) child_process.spawn (或其他方法child_process )。 (顯然,您不能將shell選項指定為默認false以外的任何選項。)

這使您不必擔心文件路徑中的元字符,但是在我看來,讓用戶提供要在實時文件系統上使用的文件路徑名還有很多其他問題。 就個人而言,我會自動生成安全的短名稱,並將用戶名與文件系統名的對應關系保存在某個數據庫中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM