亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Node.js中安全調用系統(tǒng)命令的方法(避免注入安全漏洞)

 更新時間:2014年12月05日 08:58:00   投稿:junjie  
這篇文章主要介紹了Node.js中安全調用系統(tǒng)命令的方法(避免注入安全漏洞),本文講解的一般是連接字符串會時出的安全問題情況,需要的朋友可以參考下

在這篇文章中,我們將學習正確使用Node.js調用系統(tǒng)命令的方法,以避免常見的命令行注入漏洞。

我們經(jīng)常使用的調用命令的方法是最簡單的child_process.exec。它有很一個簡單的使用模式;通過傳入一段字符串命令,并把一個錯誤或命令處理結果回傳至回調函數(shù)中。

這里是你通過child_process.exec調用系統(tǒng)命令一個非常典型的例子。

復制代碼 代碼如下:

child_process.exec('ls', function (err, data) {
    console.log(data);
});

不過,當你需要在你調用的命令中添加一些用戶輸入的參數(shù)時,會發(fā)生什么?顯而易見的解決方案是把用戶輸入直接和您的命令進行字符串合并。但是,我多年的經(jīng)驗告訴我:當你將連接的字符串從一個系統(tǒng)發(fā)送到另一個系統(tǒng)時,總有一天會出問題。

復制代碼 代碼如下:

var path = "user input";
child_process.exec('ls -l ' + path, function (err, data) {
    console.log(data);
});

為什么連接字符串會出問題?

嗯,因為在child_process.exec引擎下,將調用執(zhí)行"/bin/sh"。而不是目標程序。已發(fā)送的命令只是被傳遞給一個新的"/bin/ sh'進程來執(zhí)行shell。 child_process.exec的名字有一定誤導性 - 這是一個bash的解釋器,而不是啟動一個程序。這意味著,所有的shell字符可能會產(chǎn)生毀滅性的后果,如果直接執(zhí)行用戶輸入的參數(shù)。

復制代碼 代碼如下:

[pid 25170] execve("/bin/sh", ["/bin/sh", "-c", "ls -l user input"], [/* 16 vars */]

比如,攻擊者可以使用一個分號";"來結束命令,并開始一個新的調用,他們可以使用反引號或$()來運行子命令。還有很多潛在的濫用。

那么什么是正確的調用方式?

execFile / spawn

像spawn和execFile采用一個額外的數(shù)組參數(shù),不是一個shell環(huán)境下可以執(zhí)行其他命令的參數(shù),并不會運行額外的命令。

讓我們使用的execFile和spawn修改一下之前的例子,看看系統(tǒng)調用有何不同,以及為什么它不容易受到命令注入。

child_process.execFile

復制代碼 代碼如下:

var child_process = require('child_process');

var path = "."
child_process.execFile('/bin/ls', ['-l', path], function (err, result) {
    console.log(result)
});


運行的系統(tǒng)調用
復制代碼 代碼如下:

[pid 25565] execve("/bin/ls", ["/bin/ls", "-l", "."], [/* 16 vars */]

child_process.spawn

使用 spawn 替換的例子很相似。

復制代碼 代碼如下:

var child_process = require('child_process');

var path = "."
var ls = child_process.spawn('/bin/ls', ['-l', path])
ls.stdout.on('data', function (data) {
    console.log(data.toString());
});

運行的系統(tǒng)調用

復制代碼 代碼如下:

[pid 26883] execve("/bin/ls", ["/bin/ls", "-l", "."], [/* 16 vars */

當使用spawn或execfile時,我們的目標是只執(zhí)行一個命令(參數(shù))。這意味著用戶不能運行注入的命令,因為/bin/ls并不知道如何處理反引號或pipe或;。它的/bin/bash將要解釋的是那些命令的參數(shù)。它類似于使用將參數(shù)傳入SQL查詢(parameter),如果你熟悉的話。

但還需要警告的是:使用spawn或execFile并不總是安全的。例如,運行 /bin/find,并傳入用戶輸入?yún)?shù)仍有可能導致系統(tǒng)被攻陷。 find命令有一些選項,允許讀/寫任意文件。

所以,這里有一些關于Node.js運行系統(tǒng)命令的指導建議:

避免使用child_process.exec,當需要包含用戶輸入的參數(shù)時更是如此,請牢記。
盡量避免讓用戶傳入?yún)?shù),使用選擇項比讓用戶直接輸入字符串要好得多。
如果你必須允許用戶輸入?yún)?shù),請廣泛參考該命令的參數(shù),確定哪些選項是安全的,并建立一個白名單。

相關文章

  • package.json配置文件構成詳解

    package.json配置文件構成詳解

    這篇文章主要介紹了package.json配置文件構成以及相關知識點內容,有興趣的朋友們可以學習下。
    2019-08-08
  • window10下node使用管理神器NVM安裝配置超詳細步驟

    window10下node使用管理神器NVM安裝配置超詳細步驟

    nvm全稱Node Version Manager是 Nodejs 版本管理器,它讓我們能方便的對 Nodejs 的版本進行切換,nvm 的官方版本只支持 Linux 和 Mac, Windows 用戶,可以用 nvm-windows,這篇文章主要介紹了window10下node使用管理神器NVM安裝配置超詳細步驟,需要的朋友可以參考下
    2023-01-01
  • 使用PM2實現(xiàn)高效的應用監(jiān)控與管理功能

    使用PM2實現(xiàn)高效的應用監(jiān)控與管理功能

    PM2?是一個流行的進程管理器,用于?Node.js?應用程序,它支持應用程序的負載均衡、自動重啟、日志管理、監(jiān)控以及多環(huán)境管理等功能,本文給大家介紹了如何使用PM2實現(xiàn)高效的應用監(jiān)控與管理功能,需要的朋友可以參考下
    2024-02-02
  • Nest.js參數(shù)校驗和自定義返回數(shù)據(jù)格式詳解

    Nest.js參數(shù)校驗和自定義返回數(shù)據(jù)格式詳解

    這篇文章主要給大家介紹了關于Nest.js參數(shù)校驗和自定義返回數(shù)據(jù)格式的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 基于NodeJS開發(fā)釘釘回調接口實現(xiàn)AES-CBC加解密

    基于NodeJS開發(fā)釘釘回調接口實現(xiàn)AES-CBC加解密

    這篇文章主要介紹了基于NodeJS開發(fā)釘釘回調接口 實現(xiàn)AES-CBC加解密,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • CentOS7中源碼編譯安裝NodeJS的完整步驟

    CentOS7中源碼編譯安裝NodeJS的完整步驟

    這篇文章主要給大家介紹了關于CentOS7中源碼編譯安裝NodeJS的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用nodejs具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • 詳解Nodejs get獲取遠程服務器接口數(shù)據(jù)

    詳解Nodejs get獲取遠程服務器接口數(shù)據(jù)

    這篇文章主要介紹了Nodejs get獲取遠程服務器接口數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • Nodejs的express使用教程

    Nodejs的express使用教程

    Express 是一個簡潔、靈活的 node.js Web 應用開發(fā)框架, 它提供一系列強大的特性,幫助你創(chuàng)建各種 Web 和移動設備應用,本篇文章給大家介紹nodejs的express使用教程,感興趣的朋友參考下
    2015-11-11
  • node.js中的fs.fchown方法使用說明

    node.js中的fs.fchown方法使用說明

    這篇文章主要介紹了node.js中的fs.fchown方法使用說明,本文介紹了fs.fchown方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • Nodejs之TCP服務端與客戶端聊天程序詳解

    Nodejs之TCP服務端與客戶端聊天程序詳解

    這篇文章主要為大家詳細介紹了Nodejs之TCP服務端與客戶端聊天程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07

最新評論