PHP セキュリティのベスト プラクティスを実装する方法
PHP セキュリティのベスト プラクティスを実装する方法
PHP は、動的およびインタラクティブなウェブサイト。ただし、PHP コードはさまざまなセキュリティ脆弱性に対して脆弱になる可能性があります。 Web アプリケーションをこれらの脅威から保護するには、セキュリティのベスト プラクティスを実装することが重要です。
入力検証
入力検証は、ユーザー入力を検証し、SQL インジェクションなどの悪意のある入力を防止するための重要な最初のステップです。 PHP は、filter_var()
や preg_match()
など、さまざまな入力検証関数を提供します。
例:
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
出力のサニタイズ
出力のサニタイズは、ユーザーが生成したコンテンツを安全な形式に変換し、相互接続を防ぎます。サイト スクリプティング (XSS) 攻撃。 PHP には、特殊文字をエスケープするための htmlspecialchars()
関数が用意されています。
例:
echo htmlspecialchars($comment);
セッション管理
セッションは、ユーザー データを安全に保存する方法です。 PHP は、session_start()
を使用してセッションを開始し、$_SESSION
配列を使用してデータを保存します。
例:
session_start(); $_SESSION['userID'] = 123;
CSRF 攻撃の防止
クロスサイト リクエスト フォージェリ (CSRF) 攻撃は、被害者のセッションを悪用します。彼らは知らないうちに悪意のある行動を実行します。 CSRF を防ぐには、トークンまたは Synchro Token Pattern を使用します。
例:
$csrfToken = bin2hex(openssl_random_pseudo_bytes(16)); $_SESSION['csrfToken'] = $csrfToken;
安全なデータベース接続を使用する
データベース接続は SQL インジェクションに対して脆弱です。 PHP は、データベース接続を安全に処理するための PDO (PHP Data Objects) ライブラリを提供します。
例:
$dsn = 'mysql:host=localhost;dbname=mydatabase'; $username = 'root'; $password = 'secret'; $db = new PDO($dsn, $username, $password);
安全な暗号化アルゴリズムを使用する
パスワードと機密データには強力な暗号化アルゴリズム (bcrypt など) を使用する必要があります。または Argon2) を使用して暗号化します。 PHP は、password_hash()
関数と password_verify()
関数を提供します。
例:
$hashedPassword = password_hash('myPassword', PASSWORD_BCRYPT);
ソフトウェアを常に最新の状態に保つ
PHP およびサードパーティのライブラリを定期的に更新することが重要です。セキュリティ上の脆弱性にパッチを適用します。 「composer update」コマンドを使用すると、Composer パッケージを自動的に更新できます。
安全な Web サーバーを使用する
Nginx や Apache などの安全な Web サーバーは、追加のセキュリティ層を提供し、一般的な攻撃をブロックするように構成できます。
実践事例
ベスト プラクティスを組み合わせてログイン フォームを保護する方法を示す次のサンプル PHP スニペットについて考えてみましょう:
<?php session_start(); // 输入验证 $username = filter_var($_POST['username'], FILTER_SANITIZE_STRING); $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING); // 输出净化 $username = htmlspecialchars($username); $password = htmlspecialchars($password); // 防止 CSRF 攻击 $csrfToken = $_POST['csrfToken']; if (!isset($csrfToken) || $csrfToken !== $_SESSION['csrfToken']) { die('无效的 CSRF 令牌!'); } unset($_SESSION['csrfToken']); // 数据库连接和查询 $dsn = 'mysql:host=localhost;dbname=mydatabase'; $username = 'root'; $password = 'secret'; $db = new PDO($dsn, $username, $password); $stmt = $db->prepare('SELECT * FROM users WHERE username = ?'); $stmt->execute([$username]); // 身份验证和会话管理 $user = $stmt->fetch(PDO::FETCH_ASSOC); if ($user && password_verify($password, $user['password'])) { $_SESSION['userID'] = $user['id']; $_SESSION['username'] = $user['username']; header('Location: dashboard.php'); } else { echo '登录失败!'; } ?>
以上がPHP セキュリティのベスト プラクティスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

SQLインジェクション攻撃を回避するために、次の手順を実行できます。パラメーター化されたクエリを使用して、悪意のあるコードインジェクションを防ぎます。 SQLクエリの構文を壊さないように、特殊文字をエスケープします。セキュリティのために、ホワイトリストに対してユーザー入力を確認します。入力検証を実装して、ユーザー入力の形式を確認します。セキュリティフレームワークを使用して、保護対策の実装を簡素化します。セキュリティの脆弱性をパッチするために、ソフトウェアとデータベースを更新してください。データベースアクセスを制限して、機密データを保護します。不正アクセスを防ぐために、機密データを暗号化します。セキュリティの脆弱性と異常な活動を検出するために、定期的にスキャンおよび監視します。

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

NAVICATを使用してローカルMYSQLデータベースに接続するには:接続を作成し、接続名、ホスト、ポート、ユーザー名、およびパスワードを設定します。接続をテストして、パラメーターが正しいことを確認します。接続を保存します。接続リストから新しい接続を選択します。接続するデータベースをダブルクリックします。

and:mysql:Alter table_name add column_name data_type; postgresql:column column_name data_typeを変更するcolumn column_name datape; oracle:alter table_name add(column_name data_type);

SQLグラフィックスの列を追加するツール:追加する列を選択するテーブルを選択します。 [テーブルを変更]または同様のオプションを右クリックして選択します。新しい列のプロパティ(名前、データ型、長さ、または空のかどうか)を定義します。該当する場合は、新しい列のデフォルト値を指定します。データエラーを回避するには、適切なデータ型を選択します。意味のある列名を使用します。大きなテーブルで列の追加操作を実行する際のパフォーマンスへの影響を考慮してください。データの損失を防ぐために、操作の前に常にデータベースをバックアップしてください。

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

SQL注入の脆弱性を防ぐために、組織は次の手順を実行する必要があります。機密データをパラメーター化されたクエリに置き換えます。データ入力の形式と文字を確認します。ユーザーが入力した文字のリストを制限します。 SQLコマンドとして解釈されないように、特殊文字を脱出します。セキュリティを増やすために、事前コンパイルされたストアドプロシージャを使用します。セキュリティフレームワークを統合して、アプリケーションを保護します。脆弱性を修正するために、ソフトウェアとデータベースを定期的に更新します。
