Netsparker Standard如何進行HMAC身份驗證
通過Netsparker Standard中的腳本進行HMAC身份驗證
基于哈希的消息認證碼(HMAC)用于基于對稱密碼學的完整性和真實性檢查。
目標Web應用程序的客戶端和服務器共享一個秘密密鑰和一個應用程序ID,這些密鑰和一個應用程序ID用于計算用于簽名并驗證HTTP請求的哈希碼:
- 客戶端使用此密鑰和應用程序ID對發送到服務器的每個HTTP請求進行簽名。
- 然后,服務器使用相同的密鑰和應用程序ID來驗證屬于該客戶端的請求,并且在傳輸到服務器時未更改(MiTM 攻擊)。
Netsparker公開其請求對象,該對象允許用戶使用此腳本功能修改HTTP請求標頭。
API開發平臺Postman也具有類似的功能,允許用戶編寫請求前腳本。如果將郵遞員導出文件導入到Netsparker,則也將導入預請求腳本。
盡管因實現而異,但大多數HMAC實現都使用HTTP方法,請求路徑,查詢字符串,時間戳和有效負載數據來計算簽名。Netsparker在腳本API中公開了所有這些屬性。
Netsparker的腳本API提供SHA512和SHA256哈希函數,使您能夠計算請求哈希。
郵遞員預請求腳本樣例
Netsparker可以使用一個簡單的Postman預請求腳本(例如下面定義的腳本)來編寫HMAC標頭。此標頭將添加到Netsparker發送的所有請求標頭中:
function getPath(url) {
var pathRegex = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var result = url.match(pathRegex);
return result && result.length > 1 ? result[1] : '';
}
function getQueryString(url) {
var arrSplit = url.split('?');
return arrSplit.length > 1 ? url.substring(url.indexOf('?')+1) : '';
}
function getAuthHeader(httpMethod, requestUrl, requestBody) {
var CLIENT_KEY = 'REPLACE_WITH_YOUR_CLIENT_KEY';
var SECRET_KEY = 'REPLACE_WITH_YOUR_SECRET_KEY';
var AUTH_TYPE = 'HMAC-SHA512';
var requestPath = getPath(requestUrl);
var queryString = getQueryString(requestUrl);
if (httpMethod == 'GET' || !requestBody) {
requestBody = '';
} else {
requestBody = JSON.stringify(requestBody);
}
var hashedPayload = CryptoJS.enc.Hex.stringify(CryptoJS.SHA512(requestBody));
var timestamp = new Date().toISOString().split('.')[0]+"Z";
var requestData = [httpMethod, requestPath, queryString, timestamp, hashedPayload].join("\n");
var hashedRequestData = CryptoJS.enc.Hex.stringify(CryptoJS.SHA512(requestData));
var hmacDigest = CryptoJS.enc.Hex.stringify(CryptoJS.HmacSHA512(hashedRequestData, SECRET_KEY));
var authHeader = AUTH_TYPE + ' timestamp=' + timestamp + ",
client=" + CLIENT_KEY + ', signature=' + hmacDigest;
return authHeader;
}
netsparker.setEnvironmentVariable('hmacAuthHeader', getAuthHeader(request['method'],
request['url'], request['data']));
在該示例中,在第25-38行之間,
the request method, path, query string和timestamp值生成有效負載。該有效負載用于計算請求的哈希。秘密密鑰用作SHA-512哈希函數的密鑰。在計算完哈希之后,在第33-34行中通過串聯以下各項來構建身份驗證頭:
使用的哈希函數的名稱
計算哈希值的時間戳
服務器提供的客戶端密鑰
哈希函數的輸出
這些值形成hmac身份驗證標頭。在第38行,此值分配給名為的Postman變量hmacAuthHeader。要將此變量用作身份驗證標頭,請將身份驗證標頭添加到Netsparker,并將其值設置為“ {{hmacAuthHeader}}”。雙花括號表示此值不是恒定的。Netsparker只是查找和替換的占位符。
如何通過Netsparker Standard中的腳本配置HMAC身份驗證
- 打開Netsparker Standard。
- 在“啟動新掃描”對話框中,單擊“ 預請求腳本” 選項卡。
- 選擇啟用復選框。
- 單擊“ 預設” 下拉列表,然后選擇“ HMAC”。

- 單擊標題選項卡。

- 添加具有以下值的Authorization標頭:{{hmacAuthHeader}}。這將添加一個預請求腳本,該腳本將計算HMAC哈希。要將此標頭用于所有請求,我們還在標頭標簽中添加了一個占位符:{{hmacAuthHeader}}。請求前腳本引擎將執行此JavaScript代碼,并在Netsparker發出的每個請求之前計算標頭。
Netsparker Standard 中文漢化使用教程
推薦文章: