Programming
SQLインジェクション対策 総”習”編 – 第五回関西DB勉強会
第五回 関西DB勉強会でお話しさせて頂いた SQLインジェクション対策 総”習”編 の公開用資料をSlideShareにアップロードしました。私のセッションを気に入って頂けた方が多かったようで何よりです。 関西DB勉強会、面白かったです。久々にお会いできた方もいました。超満員でもう少しで入りきれないほどでした。また参加できれば、と思っています。 P…
暗号を積極的に使う理由
Googleは暗号を積極的に使っていることが知られています。暗号を積極的に使う理由を紹介します。 「信頼境界線の中で暗号を使っても、内部に侵入を許した時点で終わり」なので、「暗号を使っても意味がない」と考えているかも知れません。「リスクの廃除」だけが、セキュリティ対策ではありません。「リスクの緩和」もセキュリティ対策です。暗号は侵入を許してしまった場合のリス…
HMACハッシュの使い方のまとめ
最近、HMACハッシュ(hash_hmac)の使い方を書いてきたのでまとめです。 (さらに…)
プログラム・コードが正しく動作する為の必要条件と十分条件
プログラム・コードが正しく動作する為の必要条件と十分条件を考えたことがあるでしょうか? プログラム・コードが正しく動作する為の必要条件と十分条件とは何でしょうか? (さらに…)
文字列(ハッシュ)の安全な比較方法 – hash_equals
映画などでPINコードを一桁づつ解析してドアを開錠する、といったシーンがあると思います。こんなのは”映画の世界だけ”と思っている方も多いと思います。しかし、タイミング攻撃を利用すると”実際にこれと全く同じ方法”で鍵となる情報を解析できます。 タイミング攻撃とはサイドチャネル攻撃の一種で、鍵情報を比較的簡単に解析する方法です。PHP 5.6からはタイミング攻撃…
コンピュータは数値さえ正確に扱えない
コンピュータで数値を正確に扱うのは「実は結構難しい」です。つまり「コンピューターは数値を正確に扱えない」という事です。「コンピューターが数値を正確に扱えない?!何を言ってるんだ?!」と思った方は是非読んでみてください。 (さらに…)
PHPで整数オーバーフロー/アンダーフローをチェックする方法
ユーザーから整数値を受け取った時にその値が整数型の範囲内に収まるか、チェックしたいことがあります。 (さらに…)
SQL識別子のエスケープ
SQLの識別子(テーブル名やフィールド名)はプリペアードクエリではエスケープできません。最近の開発者はSQLの"パラメーター”には注意を払うようになったので、SQLパラメーターによるSQLインジェクションはかなり少くなってきました。 この結果、相対的にSQL識別子によるSQLインジェクション脆弱性の割合が増えています。実際、私がコード検査を行っているアプリケ…
Struts 2の脆弱性でHTTPのContent-Typeヘッダーからリモートコード実行ができる理由
Apache Struts2 の脆弱性対策について(CVE-2017-5638)(S2-045)は HTTPプロトコルのContent-Typeヘッダーでリモートからコード実行ができる という問題です。どうして「Content-Typeヘッダー」でコード実行ができたのか?気になったので調べたメモです。 コード実行ができた理由は「国際化(翻訳)用のメッセージ処…