`mysql_real_escape_string()` と `mysql_escape_string()` の使用はアプリケーションを保護するのに十分ですか?

Mary-Kate Olsen
リリース: 2024-11-03 10:58:03
オリジナル
570 人が閲覧しました

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

mysql_real_escape_string() と mysql_escape_string() はアプリのセキュリティに十分ですか?

これらの関数は SQL インジェクションやその他の攻撃に対してある程度の保護を提供できますが、

SQL インジェクション

Mysql_real_escape_string() は、クエリ内で PHP 変数を不適切に処理した場合でも、アプリケーションを SQL インジェクションにさらす可能性があります。次の例を考えてみましょう:

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  
ログイン後にコピー

mysql_real_escape_string() はテーブル名、列名、または LIMIT フィールドを保護するように設計されていないため、このクエリは攻撃者によって操作されて未承認の SQL ステートメントを実行する可能性があります。

Like 攻撃

Mysql_real_escape_string() は、LIKE エクスプロイトを防ぐには不十分です。攻撃者は、「%%」などの悪意のある値を入力してすべてのレコードを返し、機密情報を侵害する可能性があります。

Charset Exploits

特定のブラウザは charset に対して脆弱である可能性があります。これを悪用すると、攻撃者がエスケープ メカニズムをバイパスして任意の SQL コマンドを実行する悪意のある文字を挿入できるようになります。

プリペアド ステートメント: 包括的なソリューション

アプリケーションを効果的に保護するには、次のようにします。 mysql_real_escape_string() の代わりに準備されたステートメントを使用することをお勧めします。プリペアド ステートメントは、ユーザーが指定した値をパラメータとしてバインドすることにより、SQL クエリを実行します。これにより、手動でエスケープする必要がなくなり、承認された SQL のみが実行されるようになります。

PHP でプリペアド ステートメントを使用する例を次に示します。

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }
ログイン後にコピー

プリペアド ステートメントは、次のようなプロアクティブな防御メカニズムを提供します。基盤となるデータベース サーバーのセキュリティ機能を活用します。これらは本質的に既知の攻撃と未知の攻撃の両方に対して耐性があり、データの整合性を確保します。

以上が`mysql_real_escape_string()` と `mysql_escape_string()` の使用はアプリケーションを保護するのに十分ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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