ホームページ >データベース >mysql チュートリアル >SQL インジェクションやその他の落とし穴を避けるために、PHP で MySQL 拡張機能を安全に使用するにはどうすればよいですか?

SQL インジェクションやその他の落とし穴を避けるために、PHP で MySQL 拡張機能を安全に使用するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-12 13:27:10122ブラウズ

How Can I Securely Use the MySQL Extension in PHP to Avoid SQL Injection and Other Pitfalls?

MySQL 拡張機能を使用した安全な MySQL クエリ

概要

PDO の普及にもかかわらず、 mysql_* ファミリーの関数は、依然として PHP データベースとの対話で一般的な選択肢です。このライブラリは適切に使用すれば完全に安全ですが、使用するとセキュリティや技術的な問題が発生することがよくあります。この記事では、MySQL 拡張機能を安全に使用する方法を示す完璧なコード サンプルを提供します。

よくある落とし穴の回避

mysql_* 関数は、次のようないくつかの一般的な問題があることで有名です。 :

  • SQL インジェクション
  • エラー処理問題
  • クロスサイト スクリプティング (XSS) インジェクション

サンプル コード

次のコード サンプルは、上記の問題を軽減しながら、POST 変数に基づいてデータベース テーブルの行を作成するリスク:

<?php

header('Content-type: text/html; charset=utf-8');
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

$config = array(
    'host' => '127.0.0.1',
    'user' => 'my_user',
    'pass' => 'my_pass',
    'db' => 'my_database'
);

$connection = @mysql_connect($config['host'], $config['user'], $config['pass']);

if (!$connection) {
    trigger_error('Unable to connect to database: ' . mysql_error(), E_USER_ERROR);
}

if (!mysql_select_db($config['db'])) {
    trigger_error('Unable to select db: ' . mysql_error(), E_USER_ERROR);
}

if (!mysql_set_charset('utf8')) {
    trigger_error('Unable to set charset for db connection: ' . mysql_error(), E_USER_ERROR);
}

$result = mysql_query(
    'UPDATE tablename SET name = "' . mysql_real_escape_string($_POST['name']) . '" WHERE id = "' . mysql_real_escape_string($_POST['id']) . '"'
);

if ($result) {
    echo htmlentities($_POST['name'], ENT_COMPAT, 'utf-8') . ' updated.';
} else {
    trigger_error('Unable to update db: ' . mysql_error(), E_USER_ERROR);
}
?>

主な機能

  • エラー処理: エラーは、trigger_error() でキャプチャおよび報告され、詳細なエラーが抑制されます本番モードのメッセージ。
  • SQL インジェクションの防止: SQL インジェクション攻撃を防ぐために、POST 値は mysql_real_escape_string() を使用してエスケープされます。
  • Unicode サポート: データベース接続は Unicode をサポートするように構成されています。
  • 運用モード: 本番環境では、display_errors を 0 に設定することで、エラー メッセージを抑制できます。 mode.

結論

このコード サンプルは、mysql_* ファミリの関数を使用した安全な MySQL クエリの強固な基盤を提供します。適切なエラー処理を実装し、SQL インジェクションを防止し、Unicode をサポートすることで、一般的な落とし穴に対処します。これらのプラクティスを採用することで、開発者は安全で信頼性の高いデータベース駆動型アプリケーションを作成できます。

以上がSQL インジェクションやその他の落とし穴を避けるために、PHP で MySQL 拡張機能を安全に使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。