【入門編】MarkdownパーサーにおけるXSS脆弱性とサニタイズ – アプリケーションセキュリティ & 安全な開発防御ガイド

MarkdownをHTMLに変換する時、あなたのWebサイトは「見えない泥棒」を招き入れていませんか?

こんにちは。セキュリティの現場で長年、泥臭いインシデントと向き合ってきた筆者です。

今日は、開発現場でよく使う「Markdown(マークダウン)」の意外な落とし穴についてお話しします。「Markdownならタグを直接書かないから安全でしょ?」と思っているあなた。実は、その油断こそが攻撃者の最大の狙い目なんです。

「家を建てるとき、玄関の鍵をかけたはずなのに、実は窓から誰でも入れる状態だった」……そんな恐ろしい事態を、Web開発の世界で防ぐ方法を一緒に見ていきましょう。

—

1. なぜMarkdownが危険なのか?(泥棒の侵入経路)

Markdownは、# 見出し や [リンク](url) といったシンプルな記法でHTMLを生成する便利なツールです。しかし、中には「HTMLタグをそのまま許容する」という仕様を持つパーサー(変換器)があります。

例えば、攻撃者がMarkdown入力欄にこんなコードを仕込んだらどうなるでしょう。

[クリックしてね](javascript:alert(‘あなたのCookieを盗みました!’))

あるいは、もっと巧妙に:

これがHTMLに変換されると、ブラウザは「ああ、これはただの画像表示の失敗処理だね、実行しなきゃ!」と勘違いして、攻撃者のスクリプトを走らせてしまいます。これがXSS(クロスサイトスクリプティング)という攻撃です。

家の防犯に例えるなら、「合鍵を渡した覚えはないのに、手紙の隙間から細工された針金を差し込まれて鍵を開けられる」ようなものです。入り口(Markdown入力欄)を信頼しきっていると、中身がどんなに強固な金庫であっても無意味になってしまいます。

—

2. 鋼鉄の門番「DOMPurify」を設置する

では、どうすればいいのでしょうか? 答えは簡単。「入力されたものを、一度すべて洗浄(サニタイズ)する」ことです。

ここで登場するのが、業界標準の浄化ライブラリ「DOMPurify」です。これは、HTMLの中から「危ない要素(

securityintronationalをフォローする

コメント

タイトルとURLをコピーしました