プログラムのインジェクションを防ごう! - におうコードの問題集 セキュリティホールに立ち向かう編

グランパさんの「におうコードの問題集 セキュリティホールに立ち向かう編」を読みました!

f:id:konosumi:20181020095509j:plain

最初にWEBセキュリティの基礎を学んだ後に、XSSやSQLインジェクションなどの、代表的なにおいを塞いでいきます。

すごく風変わりなインジェクションが発生するわけではないですが、反対に地に足の付いた本で良書だと思います!

基礎知識編

GETとPOSTの使い分け

本書がまず面白いのは、普段何気なく使い分けていることを、言語化しようという取り組みです。

例えば、GETとPOST。どのように使い分ければ良いのでしょうか?

  • GETの使い所
    • 参照のみ
  • POSTの使い所
    • 副作用を伴うリクエスト
    • 秘匿情報の送信時
    • 送信データの容量が多い時

こうやってみると、GETを選ぶ局面は多くないように感じます。これには、ちゃんとした理由があります。

  • URLのパラメータがアクセスログに残ってしまうから
  • URLのパラメータがSNSなどで拡散されてしまうから

つまり、適切に使い分けをしないと、安易に情報漏えいしてしまう可能性があるわけです。

認証と認可

認証は、ログイン認証などのことを言います。システムを利用できる人かどうかを確認しています。

認可は、利用できる権限があるかどうかを確認します。◯◯ページはシステム管理者しかアクセスできない・・・など。

Cookieの属性

Cookieには属性があり、適切に管理をする必要があります。

  1. Domain属性
  2. パス属性
  3. Expires属性とMax-age属性
  4. Secure属性
  5. HttpOnly属性

詳しくは本書を読んでほしいですが、例えばSecureを有効にすると、HTTPSで通信が保護されている時だけクッキーを送信するようになります。

クッキーには、セッションIDなどの重要な情報が含まれているので、丁寧に扱う必要があります。

同一オリジンポリシー

ブラウザには、安全性対策のため、Aというサイト内から他のサイト(クロスオリジン)へのリソースの読み書きを制限する機能があります。

ただ、imgタグでの画像読み込みは許容されていたり、scriptのsrc属性であれば他のサイトのJavaScriptは読み込むことはできたりと、若干の癖があります。

問題集編

あんまり書いてしまうと、完全なネタバレになってしまうので、著名なインジェクションで書けそうな範囲だけ書きます。

XSS(クロスサイトスクリプティング)

任意のページに、攻撃用のスクリプトを埋め込んで攻撃する手法です。例えば、攻撃者が用意したURLが「?name=<script>alert(1)</script>」だったとします。

<?php
echo $_GET['name'];

これだけで任意のコードが実行され、脆弱性が起こりえます。簡単ですねー。つまり、気を付けないとすぐ発生してしまうのがXSSなのです。

本書では、対策としてCrystal言語で「HTML.escape」しています。いやはや、脆弱性は身近です。

その他のインジェクション

その他にも、DB関連のインジェクションとか、フォーム関連のインジェクションなどが発生します。

本書の問題に出ているコードは、わりとシンプルで普通なコードに見受けられます。そこからインジェクションを見つけ出すには、やはり嗅覚が必要そうです。

そうか、それこそが「におうコード」ということなんですね!

安全なウェブサイトの作り方を読もう

IPA(情報処理推進機構)が、安全なウェブサイトの作り方という冊子を出してます。

安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推進機構

WEBエンジニアであれば、読んだ方が良い内容が詰まっているので、読んでみてはいかがでしょうか!

同じサークル参加者の目線から

CSS組版が凄い

章のはじまりで、毎回掛け合いのシーンが描かれています。実は、これを書くのは結構大変です。

最終手段は画像を作ってしまって貼り付けることなんですが、これをCSSでやっているとしたら、地味に努力の結晶が詰まった掛け合いだと思います。

f:id:konosumi:20181014185347p:plain

CSS組版勢の底力を見ました。自分の本は、CSSどころか画像を数枚差し込んでいるくらいしかやっていないです。本の読みやすさが全然違いますね!

技術書典という素晴らしいイベント

本書の巻末の方に「技術書典という素晴らしいイベント」という項があります。

私も似たような感想を持っていて、イベントを通じた交流は勿論のこと、特にスキルアップに役に立っていると思います。

本を書けばスキルが上がる

私は、今回PHPの本を執筆しました。本を執筆するにあたり、参考文献も必死に読み込んだので、知識は色々と吸収できたと思ってます。

しかも、それをただ吸収するだけではなくて、読者に分かりやすく伝えないとなりません。これが結構大変で、うまく出来たかどうかは自信ないです(汗。

ただ、精一杯の努力は尽くしましたので、後は読者の方の反応を待ちます。

konosumi.booth.pm

技術書典の本は個性豊かで面白い!

技術書典5で購入した本を読みながら、感想を書いたりしているのですが。どれもユニークな本が多くて面白いです。

しゅういちろさんの本は「ラズパイ + サーバーレス」という視点の本です。Googleを使ったサーバーレスで、百葉箱という取り組みがまた斬新でした。

www.konosumi.net

ミジンコ組さんの本は「サークル名をひたすら収集する」で、努力の結晶な本です。自分のサークル名は「このすみ堂」と言いますが、意外とメジャーなネーミングであることがよく分かりました。

www.konosumi.net

これらの個性豊かな本が、商業誌よりも安い価格帯で買えるのですから、楽しいイベントに決まってます。

私は毎回サークル参加をしていますが、代償としてウィンドウショッピングは全く出来てないので、その点では損している気がします。参加者としてイベント参加し、本を買いまくるアプローチも、かなり楽しい気がします。

さいごに

本書で扱っているセキュリティホールは、どれも身近なセキュリティホールです。

  • XSS(クロスサイトスクリプティング)
  • SQLインジェクション
  • ...etc

これらは、常に意識していないと普通に発生してしまいます。そのため、意識しなくても発生しないような枠組み作りや、インジェクションが発生しないようにするための、コードの書き方のルール化が重要になってきます。

色々と気づきをもらえた一冊でした。

grand-pa-ma.booth.pm

におうコードの問題集 〜バリエーションに立ち向かう編〜

におうコードの問題集は、実はシリーズ物です。前作は「におうコードの問題集〜バリエーションに立ち向かう編〜」です。

実は、グランパさんとは技術書典4で合同サークルだったため、私の隣の席で頒布していました。そのせいか、私のサークルまでもが「におうブース」扱いされていたような気がするけど(苦笑)。

grand-pa-ma.booth.pm