最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

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

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

復(fù)制代碼 代碼如下:

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

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

那么什么是正確的調(diào)用方式?

execFile / spawn

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

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

child_process.execFile

復(fù)制代碼 代碼如下:

var child_process = require('child_process');

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


運行的系統(tǒng)調(diào)用
復(fù)制代碼 代碼如下:

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

child_process.spawn

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

復(fù)制代碼 代碼如下:

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)調(diào)用

復(fù)制代碼 代碼如下:

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

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

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

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

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

相關(guān)文章

  • nodejs socket實現(xiàn)的服務(wù)端和客戶端功能示例

    nodejs socket實現(xiàn)的服務(wù)端和客戶端功能示例

    這篇文章主要介紹了nodejs socket實現(xiàn)的服務(wù)端和客戶端功能,結(jié)合具體實例形式分析了nodejs基于socket通信實現(xiàn)的服務(wù)端與客戶端功能相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • nodejs解析xml文件方式(xml->json)

    nodejs解析xml文件方式(xml->json)

    這篇文章主要介紹了nodejs解析xml文件方式(xml->json),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Node.js前后端交互實現(xiàn)用戶登陸的實踐

    Node.js前后端交互實現(xiàn)用戶登陸的實踐

    本文主要介紹了Node.js前后端交互實現(xiàn)用戶登陸的實踐,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • nodejs集成sqlite使用示例

    nodejs集成sqlite使用示例

    本篇文章主要介紹了nodejs集成sqlite使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • node.js 開發(fā)指南 – Node.js 連接 MySQL 并進行數(shù)據(jù)庫操作

    node.js 開發(fā)指南 – Node.js 連接 MySQL 并進行數(shù)據(jù)庫操作

    通常在NodeJS開發(fā)中我們經(jīng)常涉及到操作數(shù)據(jù)庫,尤其是 MySQL ,作為應(yīng)用最為廣泛的開源數(shù)據(jù)庫則成為我們的首選,本篇就來介紹下如何通過NodeJS來操作 MySQL 數(shù)據(jù)庫。
    2014-07-07
  • node進程管理工具PM2用法詳解

    node進程管理工具PM2用法詳解

    本文詳細講解了node進程管理工具PM2的用法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 詳解NODEJS基于FFMPEG視頻推流測試

    詳解NODEJS基于FFMPEG視頻推流測試

    本篇文章主要介紹了詳解NODEJS基于FFMPEG視頻推流測試,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • NodeJs環(huán)境安裝與配置的實現(xiàn)步驟

    NodeJs環(huán)境安裝與配置的實現(xiàn)步驟

    本文主要介紹了NodeJs環(huán)境安裝與配置,包括配置環(huán)境和配置國內(nèi)鏡像,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • 又拍云 Node.js 實現(xiàn)文件上傳、刪除功能

    又拍云 Node.js 實現(xiàn)文件上傳、刪除功能

    這篇文章主要介紹了又拍云 Node.js 實現(xiàn)文件上傳、刪除功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-10-10
  • node.js基于express使用websocket的方法

    node.js基于express使用websocket的方法

    這篇文章主要介紹了node.js基于express使用websocket的方法,結(jié)合實例形式分析了node.js基于express調(diào)用websocket相關(guān)設(shè)置與使用操作技巧,需要的朋友可以參考下
    2017-11-11

最新評論

浦北县| 东平县| 英德市| 贵南县| 灌阳县| 和林格尔县| 海伦市| 错那县| 密云县| 枞阳县| 玛多县| 准格尔旗| 错那县| 衢州市| 长沙市| 磐石市| 集贤县| 嘉禾县| 通山县| 盖州市| 江山市| 泰安市| 泾阳县| 景宁| 台安县| 灵山县| 青海省| 绥德县| 仪陇县| 隆尧县| 蒙阴县| 应城市| 潼关县| 那曲县| 南宁市| 搜索| 嘉禾县| 五大连池市| 连南| 太白县| 元氏县|