新聞中心
Deno是一種替代JavaScript運(yùn)行時(shí)的方案,于2020年發(fā)布。最近我注意到對(duì)它的興趣越來(lái)越多,它具有一些吸引人的特點(diǎn):

創(chuàng)新互聯(lián)于2013年開始,先為習(xí)水等服務(wù)建站,習(xí)水等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為習(xí)水企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
- 避免安裝依賴項(xiàng)的需求
- 廣泛支持Web標(biāo)準(zhǔn)API
- 開箱即用的TypeScript支持
- 全功能工具集
- 精細(xì)的權(quán)限檢查
- 更安全的NPM包
- 高性能
其中吸引我注意的特性是精細(xì)的權(quán)限檢查和更安全的NPM包的概念。軟件供應(yīng)鏈攻擊在過(guò)去幾年變得越來(lái)越頻繁,并且引起了更多關(guān)注。在JavaScript生態(tài)系統(tǒng)中,NPM是一個(gè)重要的目標(biāo)。我試圖找到最近公開的NPM包數(shù)量,但沒有成功。NPM的主頁(yè)聲稱有1700萬(wàn)開發(fā)者在使用它,這個(gè)數(shù)字我一點(diǎn)也不感到意外。
許多惡意包和代碼片段的共同特點(diǎn)是需要下載額外的依賴項(xiàng)或可執(zhí)行文件。在這一點(diǎn)上,Deno可以發(fā)揮作用!除非經(jīng)過(guò)允許,否則Deno不允許訪問(wèn)環(huán)境變量、操作系統(tǒng)、文件系統(tǒng)、子進(jìn)程或網(wǎng)絡(luò)。更好的是,對(duì)于其中的一些權(quán)限,您可以允許具體的訪問(wèn)。例如,您可以允許訪問(wèn)您的應(yīng)用程序域名,但不允許其他訪問(wèn)。如果您安裝了一個(gè)惡意包,它將很難下載其額外的依賴項(xiàng)或?qū)?shù)據(jù)泄漏出去。僅憑增加的安全性,Deno就成為一個(gè)有吸引力的選擇,也是我目前關(guān)注的重點(diǎn)。
在惡意包中隱藏的加密礦工對(duì)Lambda函數(shù)的影響有限;Lambda函數(shù)執(zhí)行時(shí)間很短,很難獲得顯著的好處。數(shù)據(jù)泄漏和來(lái)自遠(yuǎn)程源的腳本執(zhí)行更可能成為問(wèn)題。這兩者都需要訪問(wèn)互聯(lián)網(wǎng),而使用Deno,您有可能阻止這種訪問(wèn)。
在AWS Lambda函數(shù)中使用Deno需要使用自定義運(yùn)行時(shí)。您可以構(gòu)建自己的運(yùn)行時(shí),也可以使用已經(jīng)存在的運(yùn)行時(shí)。如果您關(guān)注安全性,我建議保留一個(gè)現(xiàn)有運(yùn)行時(shí)的副本,并仔細(xì)檢查更新或創(chuàng)建自己的運(yùn)行時(shí)。對(duì)于這個(gè)概念驗(yàn)證,我在我的AWS賬戶中部署了Deno的Serverless Application Repository (SAR)應(yīng)用。我使用了提供的Lambda層和提供的.al2 Lambda運(yùn)行時(shí)來(lái)創(chuàng)建我的Deno Lambda函數(shù)。我創(chuàng)建了一個(gè)名為index.ts的文件,其中包含一些基本的JavaScript代碼,用于請(qǐng)求兩個(gè)不同的網(wǎng)站并返回響應(yīng)的HTTP狀態(tài)碼或捕獲的錯(cuò)誤。然后,我更新了函數(shù)的配置以引用導(dǎo)出的handler函數(shù)。
typescript
export async function handler() {
const r1 = await makeRequest('https://deno.com');
const r2 = await makeRequest('https://example.com');
return { r1, r2 };
}
async function makeRequest(url: string) {
try {
const res = await fetch(url);
return res.status;
} catch (error) {
return error;
}
}部署后,我從控制臺(tái)調(diào)用了我的Lambda函數(shù),并收到了兩個(gè)HTTP 200的響應(yīng)。由于自定義運(yùn)行時(shí)的要求,Deno Lambda運(yùn)行時(shí)默認(rèn)允許所有的網(wǎng)絡(luò)和環(huán)境變量請(qǐng)求。Lambda自定義運(yùn)行時(shí)通過(guò)與本地主機(jī)通信并通過(guò)環(huán)境變量接收初始化信息來(lái)工作。盡管有這個(gè)默認(rèn)設(shè)置,我們可以縮小Deno的權(quán)限范圍并更嚴(yán)格地限制訪問(wèn)。我使用的自定義運(yùn)行時(shí)允許您通過(guò)修改DENO_PERMISSIONS環(huán)境變量來(lái)指定傳遞給Deno運(yùn)行時(shí)的權(quán)限。默認(rèn)值是--allow-env --allow-net。如果Lambda函數(shù)在應(yīng)用程序中不需要任何網(wǎng)絡(luò)訪問(wèn),您可以使用如--allow-env --allow-net=127.0.0.1:9001的值,以僅允許所需的Lambda Runtime API通信。對(duì)于我的概念驗(yàn)證,我將DENO_PERMISSIONS設(shè)置為--allow-env --allow-net=127.0.0.1:9001,deno.com,允許訪問(wèn)deno.com但不允許訪問(wèn)example.com。調(diào)用我的Lambda函數(shù),我得到了以下結(jié)果:
json
{
"r1": 200,
"r2": {
"name": "PermissionDenied"
}
}在本地運(yùn)行Deno時(shí),您將被要求允許訪問(wèn),但在Lambda函數(shù)中,當(dāng)嘗試未授權(quán)的訪問(wèn)時(shí),將拋出錯(cuò)誤。如果執(zhí)行了一個(gè)惡意包,您可能會(huì)注意到意外的失敗或日志消息,但代碼的影響將受到限制。
使用這種方法需要開發(fā)人員額外付出努力,以確??紤]到所有所需的權(quán)限。如果您擔(dān)心惡意包和供應(yīng)鏈攻擊,這個(gè)努力可能是值得的。到目前為止,我僅在概念驗(yàn)證中使用了這種方法,沒有在生產(chǎn)環(huán)境中使用過(guò)。使用Deno這樣做并不替代代碼和依賴項(xiàng)掃描工具,但它可能成為一種及早發(fā)現(xiàn)問(wèn)題的預(yù)警系統(tǒng)。
當(dāng)前題目:使用Deno增強(qiáng)AWSLambda的安全性
本文URL:http://fisionsoft.com.cn/article/cohjohc.html


咨詢
建站咨詢
