django-oauth-toolkit 2.0 の client_secret ハッシュ化で外部連携が壊れた話

django-oauth-toolkit 2.0 の client_secret ハッシュ化で外部連携が壊れた話 TL;DR django-oauth-toolkit を 1.x から 2.0 にアップグレードすると、Application.client_secret が 平文からハッシュ値に自動変換 される。この変更に気づかず、DB 上のハッシュ値を「シークレット」として外部サービスにコピーすると、二重ハッシュ で認証が通らなくなる。さらに、Application を動的に生成するコードがある場合、バージョンアップ後に平文を返すべき箇所でハッシュ値を返してしまう問題も起きる。 背景 2つの Django サービス間で OAuth2 Client Credentials Grant による認証を行っていた。 サービス 役割 django-oauth-toolkit Service A (リソースサーバー) ファイル配信 API を提供 2.4.0 Service B (クライアント) API からファイルを取得 1.7.1 Service B は Service A の OAuth2 トークンエンドポイントに HTTP Basic Auth で client_id:client_secret を送信し、アクセストークンを取得してからファイルをダウンロードする。 Service B Service A | | |-- POST /o/token/ --------------->| | Authorization: Basic base64( | | client_id:client_secret) | | |-- client_secret をハッシュ化 | |-- DB のハッシュ値と比較 |<-- access_token -----------------| | | |-- GET /api/files/ -------------->| | Authorization: Bearer token | |<-- file data --------------------| このフローは数年間安定稼働していた。 ...

2026年2月13日 · 5 分

Hubspot

CTA ビデオ埋め込み viemoなどiframe配信できるサーバーにホスティングしているビデオが対象 vimeoの muted=1&autoplay=1 でも自動再生はできない (セキュリティ上の問題。自動再生は、ユーザーのトリガーがないとしてくれないケースがある) ショートムービーをアニメーションGIFに変換: 1 ffmpeg -i input.mp4 -r 10 output.gif

2025年3月25日 · 1 分

Contentful

Contentful CDA / CMA Contentful における Content Delivery API キーと CMA トークンの用途の違いについて説明します。 Content Delivery API キー (CDA キー) 用途: コンテンツ配信 API (CDA) へのアクセスを認証するために使用されます。 役割: 公開されたコンテンツを取得するために使用されます。ウェブサイトやモバイルアプリなどのフロントエンドアプリケーションから Contentful のコンテンツを読み込む際に、このキーが使用されます。 特徴: 読み取り専用のアクセス権を持ちます。コンテンツの作成、更新、削除などの変更操作はできません。 セキュリティ: 比較的安全性が低いとされています。キーが漏洩した場合でも、コンテンツの変更はできませんが、コンテンツを不正に取得される可能性があります。 Content Management API トークン (CMA トークン) 用途: コンテンツ管理 API (CMA) へのアクセスを認証するために使用されます。 役割: Contentful のコンテンツを管理 (作成、更新、削除など) するために使用されます。Contentful のバックエンドシステムや管理画面、または外部のツールから Contentful のコンテンツを操作する際に、このトークンが使用されます。 特徴: 読み取り/書き込みのアクセス権を持ちます。コンテンツの変更操作が可能です。 セキュリティ: 非常に高いセキュリティが必要です。トークンが漏洩した場合、コンテンツを不正に操作される可能性があります。 まとめ 機能 Content Delivery API キー Content Management API トークン 用途 コンテンツ配信 API へのアクセス コンテンツ管理 API へのアクセス 役割 公開されたコンテンツの取得 コンテンツの管理 (作成、更新、削除など) アクセス権 読み取り専用 読み取り/書き込み セキュリティ 比較的低い 非常に高い 注意点 ...

2025年2月12日 · 1 分

Wordpress: 脆弱性

Wordpress脆弱性 Advanced Custom Fields (ACF) https://rocket-boys.co.jp/7886/

2024年10月14日 · 1 分

Hasura

Hassura PostgreSQL サーバーから自動的に GraphQL サーバーを建てられる, PostgreSQL サーバーがあればすぐに使える GraphQL サーバーを実装する手間が省ける 他の自前で用意したGraphQLサーバーとHasuraを統合してリクエストをHasura一つにお任せすることも可能 ページングや集計クエリなども自動で生成される 実際に発行される SQL がすぐにわかる 認証認可の仕組みがある ドキュメント https://hasura.io/learn/ja/graphql/hasura/introduction/ 記事 Hasuraがめちゃくちゃ便利だよという話 Hasuraを使って環境構築してガンガン工数削減

2024年9月9日 · 1 分

AppExchange

AppExchange ISV / OEM パートナー 組織 パートナービジネス組織(Partner Business Org で PBO とも呼ばれる) パッケージ開発組織 スクラッチ組織(Scratch Org) Trialforce ソース組織(Trialforce Source Org で TSO とも呼ばれる) 顧客組織 開発 LMA 環境ハブ セキュリティレビュー Salesforce のアプリケーション審査 手順: 準備 申請 注文書と手順書 公開 年次更新 MavensMate Lightning Experience Lightning コンポーネントフレームワークとは? Lightning コンポーネント: コードを一行も記述することなくビジネスアプリを開発できます。 Aura コンポーネント コンポーネント: Visualforce Aura(いわゆるオーラ) (Aura コンポーネントの中から LWC を呼び出すことはできるが、LWC の中から Aura コンポーネントを呼び出すことはできない。) Lightning Web Conponent(LWC) 外部のデータソースを呼ぶには Apex Aura コンポーネントから Salesforce 以外の外部データを呼び出すには、以下の手順を参考にしてください: Apex コントローラーを使用する: Apex クラスを作成し、外部 API を呼び出すメソッドを定義します。例えば、HttpRequestとHttpResponseクラスを使用して外部 API にリクエストを送信し、レスポンスを処理します。 public class ExternalDataController { @AuraEnabled public static String getExternalData() { Http http = new Http(); HttpRequest request = new HttpRequest(); request.setEndpoint('https://api.example.com/data'); request.setMethod('GET'); HttpResponse response = http.send(request); return response.getBody(); } } Aura コンポーネントで Apex メソッドを呼び出す: ...

2024年8月19日 · 3 分

さくらのレンタルサーバー

さくらのレンタルサーバー 無料 SSL(Let’s Encrypt)を設定したい SSL 証明書の設定をはじめからやり直したい(さくらの有償 SSL・独自 SSL) CSR を作成したい

2024年8月19日 · 1 分

サイトセキュリティチェック

サイトセキュリティチェック Mozilla: https://observatory.mozilla.org/ トレンドマイクロ: https://global.sitesafety.trendmicro.com/?cc=jp Google: https://www.virustotal.com/gui/home/upload OWASP Zap Docker 版 OWASP ZAP を M1 Mac で動かす。 問題: : Cookie No HttpOnly Flag [10010] : Re-examine Cache-control Directives [10015] : Cross-Domain JavaScript Source File Inclusion [10017] : Missing Anti-clickjacking Header [10020] : X-Content-Type-Options Header Missing [10021] : [Information Disclosure - Suspicious Comments]https://www.zaproxy.org/docs/alerts/10027/ : [Cookie Poisoning]https://www.zaproxy.org/docs/alerts/10029/ : User Controllable HTML Element Attribute (Potential XSS) [10031] : Strict-Transport-Security Header Not Set [10035] : Content Security Policy (CSP) Header Not Set [10038] : Secure Pages Include Mixed Content [10040] : Storable and Cacheable Content [10049] : Cookie without SameSite Attribute [10054] : Permissions Policy Header Not Set [10063] : Timestamp Disclosure - Unix [10096] : Modern Web Application [10109] (対応しなくてもよい) : Dangerous JS Functions [10110] : Session Management Response Identified [10112] : Absence of Anti-CSRF Tokens [10202] : Sub Resource Integrity Attribute Missing [90003] : Charset Mismatch [90011] VIRUSTOTAL https://www.virustotal.com/gui/home/upload SUURI https://sitecheck.sucuri.net/

2024年7月22日 · 1 分

Swiper

swiper https://github.com/nolimits4web/swiper 【最新】Swiper の使い方・カスタマイズを解説!サンプルやオプション 15 個付き ー基礎から応用までー (Swiper v8.1.4) JVNDB-2021-005554 swiper における脆弱性 (6.5.1)(情報を取得される、情報を改ざんされる、およびサービス運用妨害 (DoS) 状態にされる可能性があります。)

2024年7月15日 · 1 分

MS Graph

Micsoft Graph Microsoft Graph を使ってみよう : 目次 Microsoft Graph を 標準 Java で使う OAuth2 client_credtials: 1 2 3 4 5 6 curl -d "client_id=クライアントID" \ -d "scope=https%3A%2F%2Fgraph.microsoft.com%2F.default" \ -d "client_secret=クライアントシークレット" \ -d "grant_type=client_credentials" \ -H "Content-Type: application/x-www-form-urlencoded" \ -X POST https://login.microsoftonline.com/テナントID/oauth2/v2.0/token authorization code: Microsoft Graph API を Ruby で操作してみる

2024年6月2日 · 1 分