PHP データ フィルタリング: XSS および CSRF 攻撃の防止

PHPz
リリース: 2023-07-29 15:36:01
オリジナル
1424 人が閲覧しました

PHP データ フィルタリング: XSS および CSRF 攻撃の防止

インターネットの発展に伴い、ネットワーク セキュリティが注目の焦点の 1 つになりました。 Web サイト開発では、特に XSS (クロスサイト スクリプティング攻撃) や CSRF (クロスサイト リクエスト フォージェリ攻撃) 攻撃を防ぐために、ユーザーが送信したデータをフィルターして検証することが非常に重要です。この記事では、PHP を使用してこれら 2 つの一般的なセキュリティ脆弱性を防ぐ方法を紹介し、参考用のサンプル コードをいくつか提供します。

  1. XSS 攻撃の防止

XSS 攻撃とは、悪意のある攻撃者が悪意のあるスクリプトやコードを挿入して Web ページのコンテンツを改ざんし、ユーザーの機密情報を盗んだり、マルウェアを拡散したりすることを指します。 XSS 攻撃を防ぐには、ユーザーが入力したデータをフィルタリングしてエスケープする必要があります。

(1) htmlspecialchars() 関数を使用して、HTML 特殊文字をエスケープします。

$name = $_POST['name'];
$filtered_name = htmlspecialchars($name, ENT_QUOTES, 'UTF-8');
ログイン後にコピー

(2) 正規表現を使用してユーザー入力をフィルタリングします。

$name = $_POST['name'];
$pattern = '/^[a-zA-Z0-9]+$/';
if (preg_match($pattern, $name)) {
    // 用户输入合法
} else {
    // 用户输入不合法
}
ログイン後にコピー
  1. CSRF 攻撃の防止

CSRF 攻撃とは、ユーザー情報の変更、悪意のある転送の開始など、ユーザー要求を偽造することによって不正な操作を実行する攻撃者を指します。 CSRF 攻撃を防ぐには、次のような対策を講じることができます。

(1) CSRF トークン検証を使用します。

session_start();
$csrf_token = bin2hex(random_bytes(32)); // 生成随机的令牌
$_SESSION['csrf_token'] = $csrf_token;

// 在表单中添加令牌
echo "<input type='hidden' name='csrf_token' value='{$csrf_token}'>";

// 验证令牌
if ($_POST['csrf_token'] === $_SESSION['csrf_token']) {
    // 令牌验证通过
} else {
    // 令牌验证失败
}
ログイン後にコピー

(2) リクエスト元を限定します。

if ($_SERVER['HTTP_REFERER'] !== 'http://www.example.com') {
    // 请求来源不合法
} else {
    // 请求来源合法
}
ログイン後にコピー

要約すると、ユーザーが送信したデータのフィルタリングと検証は、Web サイトのセキュリティを確保するための重要なステップです。 HTML 特殊文字をエスケープし、正規表現を使用してユーザー入力をフィルタリングし、CSRF トークン検証を使用してリクエスト ソースを制限することにより、XSS および CSRF 攻撃を効果的に防ぐことができます。ただし、セキュリティは継続的なプロセスであり、Web サイトのセキュリティを向上させるためにセキュリティ対策を継続的に更新および強化する必要があります。

参考資料:

  • PHP 公式ドキュメント (https://www.php.net/)
  • OWASP 公式 Web サイト (https://owasp.org) /)

以上がPHP データ フィルタリング: XSS および CSRF 攻撃の防止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート