doodle-on-web

自分で調べたことや、仕事の中で質問されたことなどをまとめています。

Zabbixのweb監視にてcsrf-tokenなどのCookieを変数に格納するテクニック

スポンサーリンク

状況

csrf-tokenなど、Cookieの情報を後のシナリオに利用しないとログイン処理が失敗してしまうという状況が多々あります。

https://www.zabbix.com/documentation/4.0/manual/web_monitoring/example

上記マニュアルのページですと、regex:name="csrf-token" content="([0-9a-z]{16})"となっており、レスポンスのBODYにcsrf-tokenと値が含まれているものと推測されます。

ですので、BODYにcsrf-tokenが含まれている場合には、マニュアルの通りに記載すれば解決します。

今回は、BODYにcsrf-tokenは無く、それでも次のリクエストには使用しなければならないという場合の問題への解決策となります。

ちなみにangular.jsのプロジェクトをZabbixでWeb監視する場合こちらのテクニックが必要でした。

解決策

1.監視対象のシステムで、Set-Cookieしているページを探す

csrf-tokenなり、JSESSIONIDなりをCookieに格納するには、WebサーバがSet-CookieというフィールドをHTTPヘッダに付加してレスポンスを返すことでその後のCookieで利用可能になります。

だいたい、最初にアクセスしたページ(ログインページなど)だと思います。

どうやってSet-Cookieを探すかですが、Chromeの開発者ツールがいいのではないかと思います。

対象のページでF12押下→Network→Ctrl+Fで検索窓が出るので、そこでset-cookieを検索するといいかも。)

以下の画像はQiitaで試しにset-cookieを探してみたのですが、ここではuser_session_keyと_qiita_login_sessionをCookieに格納していることがわかります。

f:id:doodle-on-web:20200303164314p:plain

2.対象のページのステップに正規表現を追加

せっかくなので、このcookieを参考にWeb監視のシナリオをステップを説明します。

名前:適宜つけてください。

URL:対象のページを指定してください。

変数:

  • 名前:{変数名}
  • 値:regex:user_session_key=(.{43})
    • csrf_tokenの場合はuser_session_keycsrf_tokenにし、正規表現のパターンを変更してください。

取得モード:必ずボディだけではなく、ヘッダも含めるようにしてください。Zabbix4.2~

f:id:doodle-on-web:20200303164335p:plain

3.それ以降のステップでその変数を利用

使用したいシナリオにて{変数}として利用してください。

ここでは、サンプルとしてヘッダにuser_session_keyが必要であると仮定してヘッダに変数を追加しています。

f:id:doodle-on-web:20200303164403p:plain

以上