1. SQL インジェクション
SQL インジェクションは、Web サイトに対する最大の脅威の 1 つです。データベースが他人の SQL Injection によってインジェクションされた場合、攻撃が発生すると、他人があなたのデータベースを転送する可能性があり、より深刻な結果を招く可能性があります。
解決策:
主流のソリューションは 2 つあります。ユーザーが入力したデータをエスケープするか、カプセル化されたステートメントを使用します。エスケープする方法は、ユーザーが送信したデータをフィルタリングし、有害なタグを削除する関数をカプセル化することです。ただし、この方法はどこでも忘れやすいため、お勧めしません。
次に、PDO を使用してカプセル化されたステートメントを実行する方法を紹介します (mysqi にも同じことが当てはまります):
$username = $_GET['username']; $query = $pdo->prepare('SELECT * FROM users WHERE username = :username'); $query->execute(['username' => $username]); $data = $query->fetch();
2、XSS
XSS は、CSS (Cross Site Script)、クロスサイト スクリプティング攻撃とも呼ばれます。悪意のある攻撃者が Web ページに悪意のある HTML コードを挿入することを指し、ユーザーがそのページを閲覧すると、Web に埋め込まれた HTML コードが実行され、ユーザーに対する悪意のある攻撃という特別な目的が達成されます。
解決策:
ユーザーからの入力を信頼せず、入力内のすべての特殊文字をフィルターで除外します。これにより、ほとんどの XSS 攻撃が排除されます:
<?php $searchQuery = htmlentities($searchQuery, ENT_QUOTES);
または、テンプレート エンジン Twig を使用できます。一般的なテンプレート エンジンは、デフォルトで htmlentities を出力に追加します。
3. いくつかの操作を実行します。
解決策:
最も一般的な防御方法は、CSRF トークンで暗号化された安全な文字列 (一般にトークンと呼ばれます) を生成し、そのトークンを Cookie またはセッションに保存することです。
Web ページ上でフォームを構築するたびに、フォームの非表示フィールドにトークンを入力します。その後、フォーム要求サーバーはユーザーの Cookie またはセッション内のトークンに基づいてトークンを比較し、検証は成功するのでパスを与えます。 攻撃者はトークンの内容を知ることができないため(各形式のトークンはランダムです)、ユーザーになりすますことはできません。 推奨チュートリアル:PHP ビデオ チュートリアル
以上がPHP の一般的なセキュリティ問題と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。