野外求生系列 - 無工具 WebApi 徒手測試

栏目: 编程工具 · 发布时间: 5年前

内容简介:基於資安考量,線上環境多半戒備森嚴,不允許隨意複製部署程式、安裝工具軟體需事先申請、開發人員無法親身操作,所有動作需委由 OP 執行。在這種困難險阻特多的環境查問題,像Inline ASPX 這類偵錯技巧就顯得格外管用。這篇談的也是類似情況,在不額外安裝或部署任何工具程式前題下,如何交由 OP 人員在 Windows 伺服器對 WebAPI 進行基本檢測?跟被丟到荒島,沒刀子沒鍋子沒打火機要就地取材升火煮飯有 87 分像...

基於資安考量,線上環境多半戒備森嚴,不允許隨意複製部署程式、安裝 工具 軟體需事先申請、開發人員無法親身操作,所有動作需委由 OP 執行。在這種困難險阻特多的環境查問題,像Inline ASPX 這類偵錯技巧就顯得格外管用。

這篇談的也是類似情況,在不額外安裝或部署任何工具程式前題下,如何交由 OP 人員在 Windows 伺服器對 WebAPI 進行基本檢測?

跟被丟到荒島,沒刀子沒鍋子沒打火機要就地取材升火煮飯有 87 分像...

野外求生系列 - 無工具 WebApi 徒手測試

本文開始

講到測試 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 的工作列及開始畫面都有捷徑,不難找:

野外求生系列 - 無工具 WebApi 徒手測試

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)

野外求生系列 - 無工具 WebApi 徒手測試

如上圖所示,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

野外求生系列 - 無工具 WebApi 徒手測試

再來測試 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

實測結果如下:

野外求生系列 - 無工具 WebApi 徒手測試

藉由以上做法,我們可以在不安裝任何軟體工具、不使用已編譯執行檔的前題下,以純文字提供一段簡單到人眼可鑑別的腳本供 OP 人員執行,解決難以驗證 WebAPI 好壞的困擾。

This article demostrates how to test a POST WebAPI without any tool software in the restricted production Windows environment.


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

UNIX网络编程 卷2

UNIX网络编程 卷2

W.Richard Stevens / 人民邮电出版社 / 2009-11 / 89.00元

《UNIX网络编程 卷2:进程间通信(英文版·第2版)》是一部UNIX网络编程的经典之作。进程间通信(IPC)几乎是所有Unix程序性能的关键,理解IPC也是理解如何开发不同主机间网络应用程序的必要条件。《UNIX网络编程 卷2:进程间通信(英文版·第2版)》从对Posix IPC和System V IPC的内部结构开始讨论,全面深入地介绍了4种IPC形式:消息传递(管道、FIFO、消息队列)、同......一起来看看 《UNIX网络编程 卷2》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具