SlideShare uma empresa Scribd logo
1 de 32
Baixar para ler offline
今日からはじめるCSP 
Dahlia* 
@dahlia_cocoa 
1
2
    ___ 
   / \::/\ 
  /。(一)::(一)。 
  |::。゚(_人_)゚| 
  \ ゚ `⌒´/゚ 
  / ⌒ヽ ̄ ̄ヽ゚。 
  / __\ \/\ \ 
 と__)_ヽ_つ ヽ_つ 
3
おしながき 
4 
• CSPとは 
• 制限について 
• 注意点とまとめ
About Me 
• Dahlia*(だりあ) 
• Twitter:@dahlia_cocoa 
• その他:http://moonfire.info 
• seccamp ’14 Web 
5 
• 専門は社会学
CSPとは 
6
CSPとは 
Content Security 
Policy の略称 
7
8
https://developer.mozilla.org/ja/docs/Security/CSP 
9
“Content Security Policy (CSP) は、クロ 
スサイトスクリプティング (XSS) やデータイ 
ンジェクション攻撃を含む、よく知られた種 
類の攻撃を検出して軽減する、セキュリティ 
の追加レイヤーです。これらの攻撃手法は、 
データ窃盗からサイト改変、マルウェア感染 
まで、すべてに使用されます。” 
10
おしまい。 
11
\1分くらいで終了/ 
12
\まだつづくよ/ 
13
CSP #とは 
• Content Security Policyの略 
• XSSやクリックジャッキングなどの攻撃を軽減で 
きる 
• 使うときはレスポンスヘッダにContent- 
Security-Policy:なんたら って追加する。 
• <meta>タグにも記述可能な模様 
• 外部リソースの読み込みや一部の機能に制限が 
発生 
14
CSP #とは 
XSSを仕掛けられて痛い目を見た。 
見つけた穴を塞いでも塞いでもやられ 
てしまう。どうしよう。 
15
CSP #とは 
CSP導入する 
→許可無しにインラインJS/スタイル使 
えない 
→XSSが超難しくなる 
 HTML/JS/CSSの分離が進む(はず) 
→うれしいヽ(・∀・)ノ 
16
CSP #とは 
外部リソース経由でなんか変なモノ仕 
込まれちゃってるんですが。 
ページを開くたびにalert出るんです 
が。 
これはどうすれば。 
17
CSP #とは 
CSP導入する 
→外部のリソースが使えなくなる 
 (必要なものだけ許可する方針で) 
→外部から危ないモノをもらっちゃう心 
配が減る 
→外部リソースにevalとかonclick=“hoge” 
とか書いてあっても止められる 
→きっとうれしい(`・ω・´) 
18
制限について 
19
制限について 
20 
• 外部リソース 
• インラインJavaScript / スタイル 
• eval 
• data: URI
CSPを書くときのキーワード 
• 'self':同一オリジンへの参照 
• 'none':空要素への参照 
21 
• 'unsafe-inline' 
• 'unsafe-eval' 
※シングルクオーテーションマークも必要
CSPのポリシーディレクティブ 
• default-src:デフォルトはここ 
22 
• img-src:画像、Favicon 
• script-src:JavaScriptのコード 
• object-src:<object> <embed> <applet> 
• media-src:<video> <canvas> 
• font-src:@font-face 
• style-src:CSS、Style属性 
• frame-src:iframeとか(非標準?)
外部リソース 
• 許可したいリソースを指定可能 
• たとえば・・・ 
画像やFaviconを全て 
http://img.moonfire.info に置いている場合 
Content-Security-Policy: default-src ‘self’; 
img-src http://img.moonfire.info 
23
eval 
• eval 基本使えない(正確には文字列をスクリプト 
として評価する系のあれこれ) 
• どうしても使いたいときだけ ‘unsafe-eval’ を 
付ける。 
• たとえば・・・ 
JSの中でevalとかを使いたい場合はこんな記述を。 
! Content-Security-Policy: default-src 'self'; 
24 
script-src 'unsafe-eval'
インライン要素 
• <script>alert(1);</script> とか 
<p style=“color:red”> とか onclick=“alert(1);”  
とか使えない。イベントはリスナーで拾うこと。 
• どうしても使いたいときだけ、’unsafe-inline’ と書 
き加える。(外部サービスでどうしても、とか) 
• たとえば・・・どうしても<script>alert(1);</script> 
と書きたいとき。 
! Content-Security-Policy: default-src ‘self’; 
script-src ‘unsafe-inline’ 
25
data: URI 
• data:image/jpeg 等はデフォルトで 
は使用不可 
• どうしても使いたい場合は、該当の 
ポリシーディレクティブにdate: と 
書き加える 
Content-Security-Policy: default-src ‘self’; 
img-src data: 
26
違反レポートの取得 
• ポリシーに違反した場合、json形式 
のレポートを送信することが可能。 
• report-uri [レポートを送信したい 
URI] を書き加えるだけ 
27 
! 
Content-Security-Policy: default-src 'self'; 
report-uri ./report/report.cgi
まとめ 
28
注意点 
• しっかり指定すれば効果テキメン。 
• 外部リソースを許可するとき、 
unsafe-inline や unsafe-evalを使う 
ときは、本当に必要か吟味すべき 
→XSSが成功する可能性ががが 
29
まとめ 
• CSPはいろんな脅威に対抗できる切 
り札のひとつ 
• これまで動いていたものが動かなく 
なる可能性があるので、設定時には 
注意が必要 
• レポート送信の機能を上手に使うと 
さらに◎ 
30
参考資料(もっと詳しく知りたい人へ) 
• CSP policy directives - Security | MDN https://developer.mozilla.org/ja/docs/ 
Security/CSP/CSP_policy_directives 
• Content Security Policy Level 2 http://www.w3.org/TR/CSP2/ 
• IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第8章 マッシュ 
アップ:クライアントサイドマッシュアップ: #4 対策に利用できる技術 http:// 
www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/705.html 
• HASHコンサルティングオフィシャルブログ: 弊社のホームページにContent Security 
Policy(CSP)を導入しました http://blog.hash-c.co.jp/2013/12/Content-Security- 
Policy-CSP.html 
• 同一originにあるフォームを利用してCSPバイパスっぽいことをする話 - 金利0無利息 
キャッシング – キャッシングできます - subtech http://subtech.g.hatena.ne.jp/ 
mala/20140612/1402558716 
• Content Security PolicyでXSSを断ち切る | monoの開発ブログ http:// 
blog.monoweb.info/blog/2012/03/15/content-security-policy/ 
31
今日からはじめるCSP(Kernel/VM@Okinawa)

Mais conteúdo relacionado

Mais procurados

安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
Hiroshi Tokumaru
 
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript APIHTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
Yosuke HASEGAWA
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
Hiroshi Tokumaru
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
Terui Masashi
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
Hitoshi Asai
 

Mais procurados (20)

安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014安全なPHPアプリケーションの作り方2014
安全なPHPアプリケーションの作り方2014
 
Reactjs
ReactjsReactjs
Reactjs
 
Rubyによるクローラー開発
Rubyによるクローラー開発Rubyによるクローラー開発
Rubyによるクローラー開発
 
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
機械学習でWebアプリの脆弱性を見つける - Reflected XSS 編 -
 
いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方いまさら聞けないパスワードの取り扱い方
いまさら聞けないパスワードの取り扱い方
 
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript APIHTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
HTML5のセキュリティ もうちょい詳しく- HTML5セキュリティその3 : JavaScript API
 
MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24MySQLの冗長化 2013-01-24
MySQLの冗長化 2013-01-24
 
機械学習を使ったハッキング手法
機械学習を使ったハッキング手法機械学習を使ったハッキング手法
機械学習を使ったハッキング手法
 
Capybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピングCapybaraで雑にWebスクレイピング
Capybaraで雑にWebスクレイピング
 
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
MySQL 4.0で9年動き続けたサーバを リプレイスしてバージョンアップした話
 
Rubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピングRubyで始めるWebスクレイピング
Rubyで始めるWebスクレイピング
 
Webアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいかWebアプリでパスワード保護はどこまでやればいいか
Webアプリでパスワード保護はどこまでやればいいか
 
今日はMongoDBの話はしない
今日はMongoDBの話はしない今日はMongoDBの話はしない
今日はMongoDBの話はしない
 
いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!いろいろ考えると日本語の全文検索もMySQLがいいね!
いろいろ考えると日本語の全文検索もMySQLがいいね!
 
Mysql toranomaki
Mysql toranomakiMysql toranomaki
Mysql toranomaki
 
JAWSUG architecture-crowler
JAWSUG architecture-crowlerJAWSUG architecture-crowler
JAWSUG architecture-crowler
 
Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話Mroongaを選んだ理由と
ちょっと嬉しかった話
Mroongaを選んだ理由と
ちょっと嬉しかった話
 
Webセキュリティ入門(xss)
Webセキュリティ入門(xss)Webセキュリティ入門(xss)
Webセキュリティ入門(xss)
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会MySQl 5.6新機能解説@第一回 中国地方DB勉強会
MySQl 5.6新機能解説@第一回 中国地方DB勉強会
 

Destaque (8)

Word bonch lt
Word bonch ltWord bonch lt
Word bonch lt
 
10分で作るオリジナルサイト - CMS/blog/adiary/Wordpress
10分で作るオリジナルサイト -  CMS/blog/adiary/Wordpress10分で作るオリジナルサイト -  CMS/blog/adiary/Wordpress
10分で作るオリジナルサイト - CMS/blog/adiary/Wordpress
 
Phpのつたえかた (初心者編) #phpstudy
Phpのつたえかた (初心者編) #phpstudyPhpのつたえかた (初心者編) #phpstudy
Phpのつたえかた (初心者編) #phpstudy
 
Nmapの真実(ゾクゾク)
Nmapの真実(ゾクゾク)Nmapの真実(ゾクゾク)
Nmapの真実(ゾクゾク)
 
今日から始めるXSS
今日から始めるXSS今日から始めるXSS
今日から始めるXSS
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
 
Angular2実践入門
Angular2実践入門Angular2実践入門
Angular2実践入門
 
複雑さに挑む!カンバンによるプロジェクト マネジメント
複雑さに挑む!カンバンによるプロジェクト マネジメント複雑さに挑む!カンバンによるプロジェクト マネジメント
複雑さに挑む!カンバンによるプロジェクト マネジメント
 

Semelhante a 今日からはじめるCSP(Kernel/VM@Okinawa)

ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Hiroh Satoh
 
実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン
Hiroyasu Suzuki
 

Semelhante a 今日からはじめるCSP(Kernel/VM@Okinawa) (20)

ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ今必要なCSSアーキテクチャ
今必要なCSSアーキテクチャ
 
ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎ライブコーディングとデモで理解するWebセキュリティの基礎
ライブコーディングとデモで理解するWebセキュリティの基礎
 
アスカン2018秋ーカイハツセキュリティ3つのレシピ-20181013
アスカン2018秋ーカイハツセキュリティ3つのレシピ-20181013 アスカン2018秋ーカイハツセキュリティ3つのレシピ-20181013
アスカン2018秋ーカイハツセキュリティ3つのレシピ-20181013
 
ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!ARMテンプレートでサーバーレスに挑む!
ARMテンプレートでサーバーレスに挑む!
 
Webシステム脆弱性LT資料
Webシステム脆弱性LT資料Webシステム脆弱性LT資料
Webシステム脆弱性LT資料
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
UShareSoft_20130425
UShareSoft_20130425UShareSoft_20130425
UShareSoft_20130425
 
Firefox Security Features
Firefox Security FeaturesFirefox Security Features
Firefox Security Features
 
情報セキュリティCAS 第三十六回放送用スライド
情報セキュリティCAS 第三十六回放送用スライド情報セキュリティCAS 第三十六回放送用スライド
情報セキュリティCAS 第三十六回放送用スライド
 
SOPの話
SOPの話SOPの話
SOPの話
 
AWSでのセキュリティ運用 ~ IAM,VPCその他
AWSでのセキュリティ運用 ~IAM,VPCその他AWSでのセキュリティ運用 ~IAM,VPCその他
AWSでのセキュリティ運用 ~ IAM,VPCその他
 
クラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccampクラウドセキュリティ基礎 #seccamp
クラウドセキュリティ基礎 #seccamp
 
情報セキュリティCAS 第七十五回放送用スライド
情報セキュリティCAS 第七十五回放送用スライド情報セキュリティCAS 第七十五回放送用スライド
情報セキュリティCAS 第七十五回放送用スライド
 
2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座2017年のセキュリティ 傾向と対策講座
2017年のセキュリティ 傾向と対策講座
 
20181108 Participation record SANS SEC545: Cloud Security Architecture and Op...
20181108 Participation record SANS SEC545: Cloud Security Architecture and Op...20181108 Participation record SANS SEC545: Cloud Security Architecture and Op...
20181108 Participation record SANS SEC545: Cloud Security Architecture and Op...
 
New Layers of Web Application Security
New Layers of Web Application SecurityNew Layers of Web Application Security
New Layers of Web Application Security
 
実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン実践!AWSクラウドデザインパターン
実践!AWSクラウドデザインパターン
 
すぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTipsすぐできるWeb制作時のセキュリティTips
すぐできるWeb制作時のセキュリティTips
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!
 

Mais de cocoa_dahlia

Mais de cocoa_dahlia (7)

ひよこさんのための
ひよこさんのための ひよこさんのための
ひよこさんのための
 
Java使いがphp使いにクラスチェンジした話
Java使いがphp使いにクラスチェンジした話Java使いがphp使いにクラスチェンジした話
Java使いがphp使いにクラスチェンジした話
 
TokyoWebLab.のお知らせ(JJUG CCC 懇親会LT)
TokyoWebLab.のお知らせ(JJUG CCC 懇親会LT)TokyoWebLab.のお知らせ(JJUG CCC 懇親会LT)
TokyoWebLab.のお知らせ(JJUG CCC 懇親会LT)
 
Keynote向けテーマ「あきいろ」作った
Keynote向けテーマ「あきいろ」作ったKeynote向けテーマ「あきいろ」作った
Keynote向けテーマ「あきいろ」作った
 
Miyazakirb vol0 lt
Miyazakirb vol0 ltMiyazakirb vol0 lt
Miyazakirb vol0 lt
 
OSC 2014 Tokyo/Spring LT(懇親会での没ネタ)
OSC 2014 Tokyo/Spring LT(懇親会での没ネタ)OSC 2014 Tokyo/Spring LT(懇親会での没ネタ)
OSC 2014 Tokyo/Spring LT(懇親会での没ネタ)
 
OSC Tokyo/Spring Lightning Talk
OSC Tokyo/Spring Lightning TalkOSC Tokyo/Spring Lightning Talk
OSC Tokyo/Spring Lightning Talk
 

Último

Último (10)

LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

今日からはじめるCSP(Kernel/VM@Okinawa)

  • 2. 2
  • 3.     ___    / \::/\   /。(一)::(一)。   |::。゚(_人_)゚|   \ ゚ `⌒´/゚   / ⌒ヽ ̄ ̄ヽ゚。   / __\ \/\ \  と__)_ヽ_つ ヽ_つ 3
  • 4. おしながき 4 • CSPとは • 制限について • 注意点とまとめ
  • 5. About Me • Dahlia*(だりあ) • Twitter:@dahlia_cocoa • その他:http://moonfire.info • seccamp ’14 Web 5 • 専門は社会学
  • 7. CSPとは Content Security Policy の略称 7
  • 8. 8
  • 10. “Content Security Policy (CSP) は、クロ スサイトスクリプティング (XSS) やデータイ ンジェクション攻撃を含む、よく知られた種 類の攻撃を検出して軽減する、セキュリティ の追加レイヤーです。これらの攻撃手法は、 データ窃盗からサイト改変、マルウェア感染 まで、すべてに使用されます。” 10
  • 14. CSP #とは • Content Security Policyの略 • XSSやクリックジャッキングなどの攻撃を軽減で きる • 使うときはレスポンスヘッダにContent- Security-Policy:なんたら って追加する。 • <meta>タグにも記述可能な模様 • 外部リソースの読み込みや一部の機能に制限が 発生 14
  • 15. CSP #とは XSSを仕掛けられて痛い目を見た。 見つけた穴を塞いでも塞いでもやられ てしまう。どうしよう。 15
  • 16. CSP #とは CSP導入する →許可無しにインラインJS/スタイル使 えない →XSSが超難しくなる  HTML/JS/CSSの分離が進む(はず) →うれしいヽ(・∀・)ノ 16
  • 17. CSP #とは 外部リソース経由でなんか変なモノ仕 込まれちゃってるんですが。 ページを開くたびにalert出るんです が。 これはどうすれば。 17
  • 18. CSP #とは CSP導入する →外部のリソースが使えなくなる  (必要なものだけ許可する方針で) →外部から危ないモノをもらっちゃう心 配が減る →外部リソースにevalとかonclick=“hoge” とか書いてあっても止められる →きっとうれしい(`・ω・´) 18
  • 20. 制限について 20 • 外部リソース • インラインJavaScript / スタイル • eval • data: URI
  • 21. CSPを書くときのキーワード • 'self':同一オリジンへの参照 • 'none':空要素への参照 21 • 'unsafe-inline' • 'unsafe-eval' ※シングルクオーテーションマークも必要
  • 22. CSPのポリシーディレクティブ • default-src:デフォルトはここ 22 • img-src:画像、Favicon • script-src:JavaScriptのコード • object-src:<object> <embed> <applet> • media-src:<video> <canvas> • font-src:@font-face • style-src:CSS、Style属性 • frame-src:iframeとか(非標準?)
  • 23. 外部リソース • 許可したいリソースを指定可能 • たとえば・・・ 画像やFaviconを全て http://img.moonfire.info に置いている場合 Content-Security-Policy: default-src ‘self’; img-src http://img.moonfire.info 23
  • 24. eval • eval 基本使えない(正確には文字列をスクリプト として評価する系のあれこれ) • どうしても使いたいときだけ ‘unsafe-eval’ を 付ける。 • たとえば・・・ JSの中でevalとかを使いたい場合はこんな記述を。 ! Content-Security-Policy: default-src 'self'; 24 script-src 'unsafe-eval'
  • 25. インライン要素 • <script>alert(1);</script> とか <p style=“color:red”> とか onclick=“alert(1);”  とか使えない。イベントはリスナーで拾うこと。 • どうしても使いたいときだけ、’unsafe-inline’ と書 き加える。(外部サービスでどうしても、とか) • たとえば・・・どうしても<script>alert(1);</script> と書きたいとき。 ! Content-Security-Policy: default-src ‘self’; script-src ‘unsafe-inline’ 25
  • 26. data: URI • data:image/jpeg 等はデフォルトで は使用不可 • どうしても使いたい場合は、該当の ポリシーディレクティブにdate: と 書き加える Content-Security-Policy: default-src ‘self’; img-src data: 26
  • 27. 違反レポートの取得 • ポリシーに違反した場合、json形式 のレポートを送信することが可能。 • report-uri [レポートを送信したい URI] を書き加えるだけ 27 ! Content-Security-Policy: default-src 'self'; report-uri ./report/report.cgi
  • 29. 注意点 • しっかり指定すれば効果テキメン。 • 外部リソースを許可するとき、 unsafe-inline や unsafe-evalを使う ときは、本当に必要か吟味すべき →XSSが成功する可能性ががが 29
  • 30. まとめ • CSPはいろんな脅威に対抗できる切 り札のひとつ • これまで動いていたものが動かなく なる可能性があるので、設定時には 注意が必要 • レポート送信の機能を上手に使うと さらに◎ 30
  • 31. 参考資料(もっと詳しく知りたい人へ) • CSP policy directives - Security | MDN https://developer.mozilla.org/ja/docs/ Security/CSP/CSP_policy_directives • Content Security Policy Level 2 http://www.w3.org/TR/CSP2/ • IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第8章 マッシュ アップ:クライアントサイドマッシュアップ: #4 対策に利用できる技術 http:// www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/705.html • HASHコンサルティングオフィシャルブログ: 弊社のホームページにContent Security Policy(CSP)を導入しました http://blog.hash-c.co.jp/2013/12/Content-Security- Policy-CSP.html • 同一originにあるフォームを利用してCSPバイパスっぽいことをする話 - 金利0無利息 キャッシング – キャッシングできます - subtech http://subtech.g.hatena.ne.jp/ mala/20140612/1402558716 • Content Security PolicyでXSSを断ち切る | monoの開発ブログ http:// blog.monoweb.info/blog/2012/03/15/content-security-policy/ 31