Snyk CodeのPHP脆弱性スキャン対応がベータ版に
DeveloperSteve Coochin
2021年9月2日
0 分で読めますSnyk CodeでPHPの脆弱性スキャンがベータ版として利用可能になりました。PHPコードのセキュリティ上の問題を、すばやく簡単に特定できます。
まずはSnykにログインするか、無料アカウントに登録してください。ログイン後、ダッシュボードの右上にあるAdd Projectボタンをクリックし、スキャンするリポジトリに接続します。

接続可能なリポジトリプラットフォームは複数あり、管理しているリポジトリがプライベートでも、すべてのリポジトリでPHPの脆弱性スキャンを実行できます。CLIやIDEからスキャンすることも可能です。開発環境にSnyk Codeをインテグレーションする方法もご覧ください。
新しいPHPスキャンで検出される可能性のある、代表的な脆弱性を3つ取り上げ、ベータ版で確認できる内容を詳しく見ていきましょう。
XSS
クロスサイトスクリプティング(XSS)の脆弱性とは、攻撃者が信頼されたアプリケーションに悪意のあるコードを挿入するものです。ユーザーのブラウザーを標的にする場合もあれば、アプリケーションのランタイムやオペレーティングシステムに挿入する場合もあります。
PHPではさまざまな理由で発生しますが、多くの場合、ユーザー入力のサニタイズが適切でないことが原因です。以前の記事コードインジェクションを防ぐ方法で詳しく解説しています。
このリポジトリのプルリクエストを使った実例を見て、確認すべき点を詳しく見ていきましょう。

この例では、左右の比較から、$_POSTの入力をサニタイズするために、フィルターの種類FILTER_SANITIZE_NUMBER_INTを指定したfilter_varが追加されていることがわかります。このフィルターは、数字とプラス記号、マイナス記号以外の文字をすべて削除します。
安全でないハッシュ
コードによるハッシュ化は、文字列を元の文字列を表す値やキーに安全に変換する方法です。データベースに保存したり、後で使用するためにランタイム内に保存したりする場合があります。多くの場合は双方向のハッシュ化で、暗号化したデータを保存し、後から復号できます。
従来、MD5は、特にPHPで、ユーザーパスワードなどを暗号化する標準的な方法でした。しかし2008年に「暗号学的に破られており、今後の使用には適さない」ことが明らかになりました。
このリポジトリに適用された修正例を見ると、署名付きキー関数の呼び出しでデフォルト値としてnullを設定しています。これにより、関数に値が渡されなかった場合はデフォルトでnullとなり、署名付きキー関数内で適切に処理できます。

SQLインジェクション
SQLインジェクションはXSSと似ていますが、データベースに悪意のあるSQLペイロードを挿入される脆弱性です。アプリケーションセキュリティにおいては、権限を昇格した新しいユーザーの追加、データの侵害、データベースからのデータ削除につながる可能性があります。
特にデータベースに渡すユーザー入力を扱う場合は、適切なサニタイズが不可欠であることを忘れないでください。
別のリポジトリの例を見ると、実装されたプルリクエストでは、データベース関数に渡す入力を処理するためにPHPのfilter_input_arrayが使われています。

Snyk CodeでPHPをスキャンする
ここで紹介したのは、Snyk Codeが持つ脆弱性に関する豊富な知識ベースの、よくある例のほんの一部です。ぜひ試して、コード内でどのような問題が検出されるかご確認ください。
改めてお伝えすると、Snyk CodeのPHP対応はベータ版です。PHP対応をさらに改善するため、ぜひフィードバックをお寄せください。ご質問や検出結果について相談したいことがあれば、お気軽にご連絡ください。
PHPセキュリティについて、こちらの記事もぜひご覧ください。
Capture the Flagを始めよう
オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。
