日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

node.js mysql防注入_避免Node.js中的命令行注入安全漏洞

發布時間:2023/12/9 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 node.js mysql防注入_避免Node.js中的命令行注入安全漏洞 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

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

child_process.exec('ls', function (err, data) {

console.log(data);

});

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

var path = "user input";

child_process.exec('ls -l ' + path, function (err, data) {

console.log(data);

});

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

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

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

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

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

execFile / spawn

像spawn和execFile采用一個額外的數組參數,不是一個shell環境下可以執行其他命令的參數,并不會運行額外的命令。

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

child_process.execFile

var child_process = require('child_process');

var path = "."

child_process.execFile('/bin/ls', ['-l', path], function (err, result) {

console.log(result)

});

運行的系統調用

[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());

});

運行的系統調用

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

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

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

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

避免使用child_process.exec,當需要包含用戶輸入的參數時更是如此,請牢記。

盡量避免讓用戶傳入參數,使用選擇項比讓用戶直接輸入字符串要好得多。

如果你必須允許用戶輸入參數,請廣泛參考該命令的參數,確定哪些選項是安全的,并建立一個白名單。

總結

以上是生活随笔為你收集整理的node.js mysql防注入_避免Node.js中的命令行注入安全漏洞的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。