datasette PR #2689: トークンベースのCSRF保護をSec-Fetch-Siteヘッダー保護に置き換え
Datasetteは、従来のCSRFトークン方式を廃止し、Go 1.25で採用されたSec-Fetch-Siteヘッダーに基づく新しいCSRF保護方式を導入した。
キーポイント
CSRF保護方式の根本的変更
従来のトークンベースのCSRF保護を、Sec-Fetch-Siteヘッダーを利用した新しい方式に置き換えた。これにより、テンプレート内の隠し入力フィールドが不要になった。
実装の簡素化と開発者体験の向上
CSRFトークンをテンプレートに散りばめる必要がなくなり、ブラウザ外から呼び出すAPIのためにCSRF保護を個別に無効化する手間も省ける。
外部研究と技術の採用
Filippo Valsordaの研究と、Go 1.25で採用されたアプローチに基づいて実装された。
AI支援開発の活用
Claude Codeが主要な実装作業を担当し、GPT-5.4によるクロスレビューを受けたが、PR説明は手書きで作成された。
影響分析・編集コメントを表示
影響分析
この変更は、DatasetteユーザーにとってCSRF保護の実装と管理を大幅に簡素化し、開発者体験を向上させる。また、オープンソースのWebフレームワーク/ツールにおいて、最新のセキュリティ研究と他エコシステムのベストプラクティスを迅速に取り入れる好例を示している。
編集コメント
AI支援ツールを活用しながらも、重要なPR説明は手書きで作成するなど、人間の判断と説明責任を重視する開発姿勢が興味深い。セキュリティと開発者体験の両立を図った実用的な改善。
datasette PR #2689: トークンベースのCSRFからSec-Fetch-Siteヘッダー保護へ置換
Datasetteは、私のasgi-csrf Pythonライブラリを使用して実装されたCSRFトークンを用いて、長年にわたりCSRF(Cross-Site Request Forgery:クロスサイトリクエストフォージェリ)攻撃から保護してきました。これらは扱いがやや面倒なものであり、テンプレート内のフォームに<input type="hidden" name="_csrf" value="...">タグを散りばめ、ブラウザ外から呼び出されることを意図したAPIに対してはCSRF保護を selectively(選択的に)無効化する必要があります。
私は、Filippo Valsordaによるこの研究を注視してきました。これは2025年8月の詳細なエッセイで説明され、その同じ月にGo 1.25の一部として実装されました。
私は今、Datasetteにも同様の改変を適用しました。以下はPR(Pull Request:プルリクエスト)の説明です。Claude Codeが多くの作業を行い(10回のコミットにわたって、私の厳密な指導のもと、GPT-5.4によるクロスレビューを経て)ましたが、私はこれらのPR説明を手書きで記述し始めることにしました。その理由の一部分は、より簡潔にすることであり、また自分自身を誠実に保つための演習としても行っています。
- Go 1.25およびFilippo Valsordaによるこの研究に触発された、新しいCSRF保護ミドルウェア。これは古いトークンベースのCSRF保護を置き換えます。
- テンプレート内のすべての
<input type="hidden" name="_csrf" value="...">のインスタンスを削除しました。これらはもはや不要です。
- datasette/hookspecs.pyで定義された
def skip_csrf(datasette, scope):プラグインフック、およびそのドキュメントとテストを削除しました。
- 新しいアプローチについて説明するよう、CSRF保護のドキュメントを更新しました。
- CSRF 変更に関するアップグレードガイドを記載しました。
原文を表示
datasette PR #2689: Replace token-based CSRF with Sec-Fetch-Site header protection
Datasette has long protected against CSRF attacks using CSRF tokens, implemented using my asgi-csrf Python library. These are something of a pain to work with - you need to scatter forms in templates with `` lines and then selectively disable CSRF protection for APIs that are intended to be called from outside the browser.
I've been following Filippo Valsorda's research here with interest, described in this detailed essay from August 2025 and shipped as part of Go 1.25 that same month.
I've now landed the same change in Datasette. Here's the PR description - Claude Code did much of the work (across 10 commits, closely guided by me and cross-reviewed by GPT-5.4) but I've decided to start writing these PR descriptions by hand, partly to make them more concise and also as an exercise in keeping myself honest.
New CSRF protection middleware inspired by Go 1.25 and this research by Filippo Valsorda. This replaces the old CSRF token based protection.
Removes all instances of in the templates - they are no longer needed.
Removes the def skip_csrf(datasette, scope): plugin hook defined in datasette/hookspecs.py and its documentation and tests.
Updated CSRF protection documentation to describe the new approach.
Upgrade guide now describes the CSRF change.
Tags: csrf, security, datasette, ai-assisted-programming
関連記事
[AINews] 今日は何も大きな出来事はありませんでした
Anthropic が RSI の兆候を示し、OpenAI の ChatGPT が月間アクティブユーザー数で 10 億人を突破。SpaceX AI は IPO について説明しているが、最も重要なのは AIE WF のチケット確保とイベント参加である。
Vite 開発元 VoidZero が Cloudflare に参画
Vite や Vitest を開発する企業「VoidZero」がクラウドプロバイダー「Cloudflare」に合流し、同社全従業員も Cloudflare の一員となる。ただし、主要プロジェクトは引き続きオープンソースとして運営される方針を示した。
Google の新モデル「Gemma 4 12B」は 16GB RAM のノート PC で動作可能に設計
Google は、メモリ消費を抑えた新しい生成 AI モデル「Gemma 4 12B」を発表した。このモデルは、一般的な消費者向けノートパソコン(RAM 16GB)でも実行できるように最適化されており、ローカルでの AI 利用を促進するものである。