【Carstay Tech Blog Vol.1】フロントエンドエンジニアも知っておきたいセキュリティ対策 ー XSS編 ー
今回から新コーナー【Carstay Tech Blog】をはじめます!
Carstayで扱っているプログラミング言語・フレームワークや、どのような点を意識して開発を進めているか、最新技術についての情報共有等、エンジニアメンバーのアウトプットも兼ねて、このnoteでご紹介していきます。
第1回は、CarstayのTech Leadのタンがnoteを書いています✍️
今回の記事では、先日開催した「第1回 JavaScript LT会」にて、LT発表の機会をいただいたので、そこでお話しした発表内容を共有します!
当日の発表資料
私の当日の発表資料は以下のスライドです。私の発表では、「フロントエンドエンジニアも知っておきたいセキュリティ対策」というタイトルで、XSS(クロスサイト・スクリプティング)の対策について、紹介しました!
詳細はこちら⬇︎
XSS(クロスサイト・スクリプティング)とは
まず初めに、XSSとは、攻撃対象のWebサイトの脆弱性を突き、攻撃者がそこに悪質なサイトへ誘導するスクリプトを仕掛けることで、サイトに訪れるユーザーの個人情報などを詐取する攻撃手法のことです。
2020年に届出されたWebサイトの脆弱性の種類別では、XSSが58%と一番多くなっています。
XSSの仕組み
XSS攻撃の一例としては、以下のような流れで行われます。
React開発時に、注意すべきXSSの脆弱性
今回は、React開発時に注意すべきXSSの脆弱性と、その対策を紹介していきます。
1. dangerouslySetInnerHTML
dangerouslySetInnerHTMLとは、React公式のエスケープを無効化するオプションです。HTMLとして認識させたい場合などに使用することがあります。
ただし、XSSの脆弱性対策としては、基本的にdangerouslySetInnerHTMLは使わない方が良いです。
どうしても使用したい場合は、徹底的にエスケープを行うことが必要です。エスケープするために、DOMPurifyなどのライブラリを使うことで、XSSの問題を解決することができます。
2. JSON.stringify()
JSON.stringify() は、JavaScriptオブジェクトを取得し、JSON 文字列に変換します。Server Side Rendering時に、React側で利用できるように、以下のように書く場合があります。
ただし、こちらもXSSの脆弱性の問題が起こるので、基本的には使用しない方が良いです。
どうしても使用したい場合は、徹底的にエスケープを行うことが必要です。エスケープするために、Serialize JavaScriptなどのライブラリを使うことで、XSSの問題を解決することができます。
3. Javascript: スキーム
aタグのhref属性は、先頭がjavascript:から始まる場合、それ以降の文字列をjavascriptとして実行され、XSSが生じます。
対策としては、スキームを http:// か https:// のみに制御する、もしくは以下コードのように先頭に "/" を記載してください。
const userInput1 = '/javascript: alert("Hack!!!")';
発表内容のまとめ
ここまで具体的事例などを挙げてきましたが、今回のフロントエンドエンジニアのためのセキュリティ対策のまとめとしては以下です。
次回のConnpassイベントはこちら!
ぜひ、ふるってご参加くださいませ⬇︎
エンジニア募集中!
Carstayでは絶賛エンジニア採用中です!私たちと一緒にVANLIFE×自動運転の未来をつくり、技術的課題を解決しているメンバーを募集しています。
ご興味を持っていただいた方は、ぜひお気軽にご応募ください!詳しくは以下のページをご覧ください*
採用情報はこちら⬇︎
2022.03.08