import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.ui.set
import org.springframework.web.bind.annotation.GetMapping

@Controller class HomeController {
@GetMapping("/")
fun home(model: Model): String {
model["title"] = "Blog"

return "home"
}
}

然后繼續到 src/main/resources/templates 文件夾以及相應的頁眉和頁腳模板。請注意,我們選擇了 mustache 模板語法;但是,您可以按照自己喜歡的語法進行制作。

header.mustache 
<html>
<head>
<title>{{title}}</title>
</head>
<body>
footer.mustache
</body>
</html>
home.mustache
{{> header}}

<h1>{{title}}</h1>

<p>This is a test blog.</p>

{{> footer}}

這就是您現在所需要的全部內容。 

您可以在終端中輸入“gradle bootRun”并在 localhost:8080 上查看您的網站,從而繼續運行您的代碼。

Kotlin 命令注入:示例和預防圖像

博客主頁。

如果您想在閱讀本文之前更好地了解幕后發生的情況,請轉到 Spring Boot 教程頁面

解釋命令注入

為了解釋什么是命令注入,我們需要討論一下 Web 應用程序中的注入。  

您可能聽說過開發人員和網絡圈子中有人討論 SQL 注入。簡而言之,注入是一種攻擊者試圖劫持用戶輸入的攻擊。通過使用特定字符或字符串,攻擊者可以繞過應用程序并操縱或獲取對應用程序數據庫的訪問權限。 

這種攻擊及其相關的漏洞在 21 世紀初期成為網絡安全的流行語,因為它看似簡單但實際上卻具有破壞性而臭名昭著。

命令注入或代碼注入是一種特殊的注入攻擊,攻擊者將 JavaScript 或 Java 代碼注入服務器以奪取對服務器的控制權。隨后,瀏覽器或應用程序運行時會錯誤地將此惡意代碼解釋為有效代碼,因為它無法區分開發人員想要的代碼和攻擊者的代碼。 

考慮到應用程序執行的任何攻擊者的任意代碼都可以繞過任何安全措施,甚至可能完全放棄服務器,這種情況尤其危險。 

值得慶幸的是,以字符串為參數并在系統上執行命令的代碼在大多數開發項目中并不是標準。大多數情況下,最佳實踐不鼓勵開發人員使用 exec 或 directory.execute 之類的函數,除非絕對必要。 

盡管如此,必須意識到您在項目中使用的某些庫可能包含這些功能并使您的平臺面臨風險。

Kotlin 命令注入:示例和預防圖像

命令注入示例

現在您知道了什么是命令注入以及它如何進入您的操作系統,讓我們看一個例子。

curl http://localhost:3000/index?image=prof.png;nc%20-l%205656%20|/bin/bash

在此示例請求中,您可以看到攻擊者正在嘗試運行以下命令: 

nc -l 5656 | /bin/bash

這個名為“netcat”的命令可以代表攻擊者在我們的服務器上運行任意代碼并徹底破壞它。 

我們假設您的應用程序正在使用上述某個易受攻擊的函數。在這種情況下,可以認為攻擊者只需將命令附加到請求中即可訪問您的服務器命令行。 

@Controller class HomeController {
@GetMapping("/index")
fun home(model: Model, image: String): String {
model["title"] = "Blog"

// Exec sample
val result: String = exec("git log --oneline " + image, stdIn = "yes")

model["image"] = result

return "home"
}
}

命令注入漏洞

為了緩解此漏洞,我們需要確保不使用可以執行命令的函數,除非絕對必要。畢竟,如果沒有訪問點,就沒有風險。因此,我們的第一道防線——預防——對這種威脅非常有效。  

此外,請務必對提供的任何用戶輸入應用輸入清理機制。一般來說,限制和規范應用程序提供的所有用戶輸入路徑。例如,尋找將動態輸入更改為固定選擇的方法,并使用安全列表來驗證所有輸入。

最后,使用 StackHawk 等安全分析工具定期掃描應用程序是否存在漏洞。StackHawk 可以測試應用程序、服務和 API 是否存在安全漏洞和威脅。它還可以通知您的團隊,以便他們有效地解決這些問題。 

結論

在為 Web 創建引人入勝且功能豐富的解決方案的過程中,專注于截止日期和里程碑的開發人員很容易忽視安全性。對于專注于以盡可能低的成本快速產生結果的項目來說,安全性和穩健性是事后考慮的方面。不幸的是,這就是市場接受的現實,作為爆炸性增長潛力的可接受權衡。 

然而,對于構建當今網絡的開發人員來說,抵制這些趨勢至關重要。同樣,負責構建未來基礎設施和工具的工程師必須意識到這些決策的影響。 

有時,修復、補丁和緩解策略的正確實施可能非常復雜。如果您的平臺非常大,情況尤其如此。  

文章來源:Kotlin Command Injection: Examples and Prevention

上一篇:

使用PHP創建Laravel實例

下一篇:

Spring Broken Access控制指南:示例及預防
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費