Skip to main content

Snyk CodeのPHP脆弱性スキャン対応がベータ版に

著者
Headshot of DeveloperSteve Coochin

DeveloperSteve Coochin

blog hero php example

2021年9月2日

0 分で読めます

Snyk CodeでPHPの脆弱性スキャンがベータ版として利用可能になりました。PHPコードのセキュリティ上の問題を、すばやく簡単に特定できます。

まずはSnykにログインするか、無料アカウントに登録してください。ログイン後、ダッシュボードの右上にあるAdd Projectボタンをクリックし、スキャンするリポジトリに接続します。

「プロジェクトを追加」パネルを展開したダッシュボードメニュー。GitHub、Cloud Foundry、Bitbucket Cloud、CLI、公開GitHubリポジトリ、その他のオプションが表示されています。

接続可能なリポジトリプラットフォームは複数あり、管理しているリポジトリがプライベートでも、すべてのリポジトリでPHPの脆弱性スキャンを実行できます。CLIやIDEからスキャンすることも可能です。開発環境にSnyk Codeをインテグレーションする方法もご覧ください。

新しいPHPスキャンで検出される可能性のある、代表的な脆弱性を3つ取り上げ、ベータ版で確認できる内容を詳しく見ていきましょう。

XSS

クロスサイトスクリプティング(XSS)の脆弱性とは、攻撃者が信頼されたアプリケーションに悪意のあるコードを挿入するものです。ユーザーのブラウザーを標的にする場合もあれば、アプリケーションのランタイムやオペレーティングシステムに挿入する場合もあります。

PHPではさまざまな理由で発生しますが、多くの場合、ユーザー入力のサニタイズが適切でないことが原因です。以前の記事コードインジェクションを防ぐ方法で詳しく解説しています。

このリポジトリのプルリクエストを使った実例を見て、確認すべき点を詳しく見ていきましょう。

functions.phpでPHPのPOST変数にサニタイズ処理を追加した、コードの差分表示。

この例では、左右の比較から、$_POSTの入力をサニタイズするために、フィルターの種類FILTER_SANITIZE_NUMBER_INTを指定したfilter_varが追加されていることがわかります。このフィルターは、数字とプラス記号、マイナス記号以外の文字をすべて削除します。

安全でないハッシュ

コードによるハッシュ化は、文字列を元の文字列を表す値やキーに安全に変換する方法です。データベースに保存したり、後で使用するためにランタイム内に保存したりする場合があります。多くの場合は双方向のハッシュ化で、暗号化したデータを保存し、後から復号できます。

従来、MD5は、特にPHPで、ユーザーパスワードなどを暗号化する標準的な方法でした。しかし2008年に「暗号学的に破られており、今後の使用には適さない」ことが明らかになりました。

このリポジトリに適用された修正例を見ると、署名付きキー関数の呼び出しでデフォルト値としてnullを設定しています。これにより、関数に値が渡されなかった場合はデフォルトでnullとなり、署名付きキー関数内で適切に処理できます。

generated/gnupg.phpのコード差分を左右に並べて表示。$passphraseパラメータのデフォルト値をnullに変更。

SQLインジェクション

SQLインジェクションはXSSと似ていますが、データベースに悪意のあるSQLペイロードを挿入される脆弱性です。アプリケーションセキュリティにおいては、権限を昇格した新しいユーザーの追加、データの侵害、データベースからのデータ削除につながる可能性があります。

特にデータベースに渡すユーザー入力を扱う場合は、適切なサニタイズが不可欠であることを忘れないでください。

別のリポジトリの例を見ると、実装されたプルリクエストでは、データベース関数に渡す入力を処理するためにPHPのfilter_input_arrayが使われています。

更新、削除、復元のデータベース処理に入力フィルタリングを追加したPHPコードの差分を並べて表示

Snyk CodeでPHPをスキャンする

ここで紹介したのは、Snyk Codeが持つ脆弱性に関する豊富な知識ベースの、よくある例のほんの一部です。ぜひ試して、コード内でどのような問題が検出されるかご確認ください。

改めてお伝えすると、Snyk CodeのPHP対応はベータ版です。PHP対応をさらに改善するため、ぜひフィードバックをお寄せください。ご質問や検出結果について相談したいことがあれば、お気軽にご連絡ください。

PHPセキュリティについて、こちらの記事もぜひご覧ください。

Capture the Flagを始めよう

オンデマンドのバーチャル入門ワークショップを見て、Capture the Flagの課題の解き方を学びましょう。