ウェブアプリケーション診断の「カスタム」認証では、Luaスクリプトによってログイン操作を記述することで、複雑な認証設定が可能です。
ポータル「https://outscan.outpost24.com/portal/ja/login.html」からログイン後、左端メニューより「設定」-「診断設定」をクリックします。
認証設定を行う設定を選択し、認証タブを開きます。
その後、カスタムを選択すると下記のような画面が表示されます。
「サンプルリクエスト」下の枠内にスクリプトを入力後、項目右下「実行」をクリックすると、入力した値がテスト送信されます。
画面を下へスクロールすると、リクエストおよびレスポンスを確認することが可能です。
正常にログインできたことを確認後、「保存」ボタンを押下し、設定を保存します。
以下スクリプト例となります。
例①(ID/PWのみでログイン可能な場合)
-- respにwas.requestで送信したリクエストに対するレスポンスをセットする
local resp = was.request{
-- リクエストメソッド
method = "GET",
-- リクエストURL
url = "https://test.co.jp/",
-- リダイレクトを処理するかどうか(基本はTrue)
follow = true
}
-- 2回目のリクエスト以降は既にlocal変数(resp)が作成されているのでlocalは不要
resp = was.request{
method = "POST",
url = "https://test.co.jp/login.jsp",
-- bodyパラメータ
body = "id=test&password=pass",
follow = true
}
-- ポータル上にレスポンス(resp)を表示させる。レスポンスでログイン後の画面が表示されていれば認証成功
print(resp)
例②(ID/PWに加え、トークンを必要とする場合)
※ログインページ内にトークンを含んだinputタグがある場合は、レスポンスをパースすることでトークンを取得する必要があります。
例えば画像の「__VIEWSTATE」の「value」の値を取得する場合は以下のように設定をします。
local resp = was.request{
method = "GET",
url = "https://test.co.jp/",
follow = true
}
-- tokenという変数を作成する
local token
-- start_numという変数にrespの中からVIEWSTATEという文字列の開始位置+vaule="までの文字数を設定
local start_num = string.find(resp,'VIEWSTATE') + 29
-- end_numという変数にVIEWSTATEの文字数を設定
local end_num = start_num + 200
-- tokenという変数にstart_numとend_numで切り出した文字列を設定
token = string.sub(resp,start_num,end_num)
-- tokenをurlエンコードする(token内に&や=が含まれる場合のみ)
token = wasutil.encode('url',token)
-- was.request内のbodyパラメーターに取得したtokenを追加する
resp = was.request{
method = "POST",
url = "https://test.co.jp/login.jsp",
body = 'id=test&pass=test&__VIEWSTATE='..token,
follow = true
}
-- レスポンスでログイン後の画面が表示されていれば認証成功
print(resp)
値および関数の意味は以下の通りです。(一部のみ記載)
1 | 変数を作成する | local 変数名 | 値は指定する必要はありません | |
2 | リクエストをおくる | was.request | ||
method | メソッドの指定となります | |||
url | URLを指定します | |||
headers | ヘッダーを指定します | |||
body | bodyパラメータを指定します | |||
follow | リダイレクト処理を指定します(基本True) | |||
3 | 文字列を足す | .. | 例) body = 'id=test&pass=test&token='..token..'&button=send' |
|
4 | コメントする | -- | --以降がコメントアウトされます | |
5 | エンコードする | was.encode | base64とurlエンコードが可能です | |
6 | 文字列を検索する | string.find | 例) string.find(resp,'VIEWSTATE') |
|
7 | 文字列を切り取る | string.sub | 例) string.sub(resp,start_num,end_num) |
なお、弊社にご連絡いただくことで認証の確認および設定を実施させていただきます。
認証情報および認証画面の情報を弊社サポートまでお知らせください。
コメント
0件のコメント
記事コメントは受け付けていません。