質問: ### 前提・実現したいこと Go言語を触り始めたばかりの者です。 URLクエリパラメータを受け取った際にXSS対策などで HTMLタグやメールアドレスなどをエスケープさせたいです。 可能であればタグが削除されるような方法が好ましいです。 text/temlateのHTMLEscapeStringは試しました。 あとはbluemondayも試そうと思っております。 現時点でGoにおけるメジャーな手法や よく利用されているライブラリなどあればご教授願いたいです。 POSTリクエスト(form)などはGinフレームワークで 機能がないか調べておりますが そちらも合わせて良い手法あればご教授いただけると助かります。 ### 例 ``` input AB output AB ``` ``` input AB output AB ``` 必ずしも上記のような結果でなくても良いと思っております。
回答: > > URLクエリパラメータを受け取った際にXSS対策などで > > HTMLタグやメールアドレスなどをエスケープさせたいです。 > > > これはPerlが流行っていた2000年代に横行していた設計ミスです。今の時代にこの設計はさすがにまずいと思います。 > > 可能であればタグが削除されるような方法が好ましいです。 > > > これも削除しないほうが適切なんじゃないでしょうか? * 高木浩光@自宅の日記 - WASF Times版「サニタイズ言うな!」 * 高木浩光@自宅の日記 - 続・「サニタイズ言うなキャンペーン」とは * 「サニタイズ言うなキャンペーン」私の解釈 * いまさらながら「サニタイズ言うな」が理解できた - 発声練習 * バリデーション、エスケープ、フィルタリング、サニタイズのイメージ - 徳丸浩のtumblr ✕ 入力直後にサニタイズ ◯ **出力直前に**エスケープ Golangには詳しくないですが,Web用途で利用するのであれば,HTMLテンプレートエンジンを利用すればいいだけです。そうすればHTML特殊文字のエスケープは自動的に行われます。逆に「絶対に安全が保証されているのでどうしても生のHTMLを出力したい」という場合だけ,特別にエスケープせずに出力する手段が用意されていたりします。 * valyala/quicktemplate: Fast, powerful, yet easy to use template engine for Go. Optimized for speed, zero memory allocations in hot paths. Up to 20x faster than html/template * yosssi/ace: HTML template engine for Go