内容简介:基於資安考量,線上環境多半戒備森嚴,不允許隨意複製部署程式、安裝工具軟體需事先申請、開發人員無法親身操作,所有動作需委由 OP 執行。在這種困難險阻特多的環境查問題,像Inline ASPX 這類偵錯技巧就顯得格外管用。這篇談的也是類似情況,在不額外安裝或部署任何工具程式前題下,如何交由 OP 人員在 Windows 伺服器對 WebAPI 進行基本檢測?跟被丟到荒島,沒刀子沒鍋子沒打火機要就地取材升火煮飯有 87 分像...
基於資安考量,線上環境多半戒備森嚴,不允許隨意複製部署程式、安裝 工具 軟體需事先申請、開發人員無法親身操作,所有動作需委由 OP 執行。在這種困難險阻特多的環境查問題,像Inline ASPX 這類偵錯技巧就顯得格外管用。
這篇談的也是類似情況,在不額外安裝或部署任何工具程式前題下,如何交由 OP 人員在 Windows 伺服器對 WebAPI 進行基本檢測?
跟被丟到荒島,沒刀子沒鍋子沒打火機要就地取材升火煮飯有 87 分像...
本文開始
講到測試 WebAPI,PostMan 是大多數開發者首選,但它需要安裝,出局!
如果沒有 PostMan,若有 curl.exe 也是極好的,但很不幸,就算一個小小第三方執行檔也是資安人員眼中的毒藥,不給用!
線上 Windows 主機多半不會安裝 Chrome,但至少會有活化石 IE8,如果 WebAPI 走 GET 敲 URL 就可測試還算簡單,但實務上 WebAPI 多以 POST 為主,甚至會用到 PUT、DELETE 等 REST 做法,開 F12 跑一段 JavaScript 呼叫 XHR 應可完成測試,但程式碼複雜度與操作程序對非前端開發背景的 OP 來說有難度,不優。
被逼到走投無路,一度想回頭招喚清代火器 VBScript,但最後我找到一個更好的解法 - Windows 2012+ 內建的 PowerShell,裡面有個 Invoke-WebRequest Cmdlet 可以讓我們在荒野順利求生。
直接用 範例教學:使用 ASP.NET MVC 打造 WebAPI 服務 裡的 WebAPI 當實例,其中 EncryptString 方法吃 x-www-form-urlencode 參數,BatchDecryptData 方法吃 JSON 內容當輸入參數,剛好可展示兩種常見的參數類型。
PowerShell 在 Windows Server 的工作列及開始畫面都有捷徑,不難找:
EncryptString 測試程式的寫法如下:
$Body=@{ encKey='9527' rawText='Darkthread' } Invoke-WebRequest -Method POST -Uri http://localhost:62505/codecapi/encryptstring -Body $Body
簡單解釋,第一段是宣告一個名為 $Body 的 Dictionary,有兩筆 Key/Value,encKey 及 rawText,稍後呼叫 Invoke-WebRequest,指定 POST 方法及 Uri 網址,Body 參數傳入 $Body Dictionary 會自動轉成 encKey=9527&rawText=Darkthread 作為上傳內容,其執行結果如下:(我加了一個印出 $Body 內容的步驟,驗證它是個 Dictionary)
如上圖所示,Invoke-WebRequest 會傳回一個 BasicHtmlWebResponseObject 物件,其中 Content 屬性即為 WebAPI 傳回的 ApiResult JSON。如果要解析它取出 ApiResult.Data,可先讀取回應物件 Content 屬性再用 ConvertFrom-Json 轉成物件,接著就能取出 Data:
(Invoke-WebRequest -Method POST -Uri http://localhost:62505/codecapi/encryptstring -Body $Body).Content | ConvertFrom-Json | Select Data
再來測試 BatchDecryptData。組成要上傳的 JSON 字串有好幾種做法,可以直接寫好 JSON 字串,也可先建立 PowerShell 物件再用 ConvertTo-Json 轉換,還有一種做法是寫一小段 C# 建立物件(參考: PowerShell: Creating Custom Objects )。由於上傳參數只有一個字串屬性跟一個字串陣列屬性,我選擇用 Dictionary 模擬物件。取回 BasicHtmlWebResponseObject.Content 部分我改用另一種寫法 Select -exp Content 取值(註:-exp 為 -ExpandProperty 縮寫,指傳回屬性原始型別內容,Content 需傳回字串型別才能供 ConvertFrom-Json 轉換):
$Body = @{ encKey = '9527'; encData = @('aNcjoi5QprU=','Ql9bsv6d1BVeq/9icNTcUQ==') } | ConvertTo-Json Invoke-WebRequest -Method POST -Uri http://localhost:62505/codecapi/batchdecryptdata -Body $Body -ContentType application/json | Select -exp Content | ConvertFrom-Json | Select -exp Data
實測結果如下:
藉由以上做法,我們可以在不安裝任何軟體工具、不使用已編譯執行檔的前題下,以純文字提供一段簡單到人眼可鑑別的腳本供 OP 人員執行,解決難以驗證 WebAPI 好壞的困擾。
This article demostrates how to test a POST WebAPI without any tool software in the restricted production Windows environment.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 野外求生系列 - 無工具 WebApi 徒手測試 Part 2
- 帝都程序猿 996 摸鱼求生指南
- 分布式系统设计的求生之路
- 2019年强求生欲指南:怎样防黑客?
- 委身后辈,昔日巨星MIPS能否靠开源绝地求生?
- 野外求生系列 - 使用 Powershell 測試現有 DLL
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Ajax for Web Application Developers
Kris Hadlock / Sams / 2006-10-30 / GBP 32.99
Book Description Reusable components and patterns for Ajax-driven applications Ajax is one of the latest and greatest ways to improve users’ online experience and create new and innovative web f......一起来看看 《Ajax for Web Application Developers》 这本书的介绍吧!