AdminLTE3

[PHP] cURLスクレイピングにおけるTLS設定とセキュリティ対策

投稿日:

WebスクレイピングをPHPのcURLで実装する際、通信の安全性確保は必須です。本記事では、TLS設定を中心にセキュリティ面のポイントを解説します。無効化する方法だけでなく、正しく証明書検証を行う方法や証明書ピンニングなど、運用に役立つテクニックを紹介します。

TLS設定の基本

PHPのcURLでは以下のように初期化・設定を行います。TLS設定はオプションで制御可能です。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

証明書検証の有効化

デフォルトでは検証を行わない場合が多いため、明示的に有効にします。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_CAINFO, "/path/to/cacert.pem");

TLSバージョンの指定

特定のTLSバージョンのみを許可して、安全性を高めます。

// TLS1.2のみを利用
curl_setopt($ch, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1_2);

証明書ピンニング

サーバーの公開鍵や証明書のハッシュを固定し、中間者攻撃を防ぎます。

// 公開鍵のSHA256ハッシュをピンニング
curl_setopt($ch, CURLOPT_PINNEDPUBLICKEY, "sha256//AbCdEf1234567890...=");

セキュリティ上の注意点

開発中に検証のためにCURLOPT_SSL_VERIFYPEERをfalseにすることがありますが、本番環境では絶対に無効化しないでください。無効化すると中間者攻撃や偽サイトへの接続リスクが高まります。また、最新のcURL・OpenSSLを利用し、古いプロトコル(TLS1.0/1.1)は無効化しましょう。

サーバー証明書の更新時にはCAバンドルを最新に保つこと、証明書ピンニングの運用フローを整備することも重要です。

参考サイト

PHP: cURL マニュアル

CURLOPT_SSL_VERIFYPEER - curl.se ドキュメント

-AdminLTE3

Copyright© Code Custom , 2025 All Rights Reserved.