検索
ホームページバックエンド開発PHPチュートリアルマジッククオートの影響を受けないPHPアプリケーションの作成

読む前提条件: PHP マニュアルの「パート IV セキュリティ」の「第 10 章 魔法の引用」を読んでいる必要があります。まだ見ていない場合でも問題ありません。今すぐ 10 分かけて PHP マニュアルのこの内容を読んでください。

マジック クォートは、PHP スクリプトに入力されるデータを自動的にエスケープするプロセスです。

プログラムを複数のデータベースと互換性を持たせたい場合がありますが、データベースでは異なるエスケープ文字が使用される場合があります。私たちのプログラムは異なる php.ini 設定を持つホスト上で実行される可能性があるため、magic quotes の設定は異なる可能性があるため、柔軟な PHP アプリケーションには互換性の高い PHP アプリケーションを作成することが必要です。

php.ini には 3 つの魔法引用符構成オプションがあります:

しかし、外部から送信されるグローバル変数を扱うのはさらに面倒です。

外部スーパー変数を処理するには、magic_quotes_gpc がオンになっているかどうか (magic_quotes_gpc がオンでなく、magic_quotes_sybase がオンになっている場合、magic_quotes_sybase は機能しません)、および magic_quotes_sybase がオンになっているかどうかを確認する必要があります。次に、プログラムがaddslashesまたはmagic_quotes_sybaseを使用して外部変数をエスケープする必要があるかどうかを判断します。以下のコードは具体的な実装です。

magic_quotes_gpc が On に設定され、magic_quotes_sybase が Off に設定されている場合、ini_set('magic_quotes_sybase', 1); を直接使用すると、システムが ' を使用して addslashes スタイルのエスケープをオーバーライドできると言う人もいるかもしれません。これではうまくいきません。 ini_get('magic_quotes_sybase') を使用して出力します。Magic_quotes_sybase は確かに変更されていますが、コードではエスケープ文字を使用してスラッシュ スタイルの自動エスケープをオーバーライドできません。これは、システムが外部変数を取得するときに、ini_set('magic_quotes_sybase', 1); より前に完了するためです。

/**
* magic_quotes の影響を受けない PHP アプリケーションを解決する
*
* この方法を使用するには、magic_quotes_sybase を使用して異なる DBMS に適応するかどうかを設定する必要があります
*
* 設定方法:
* $useQuotesSybase[データベース名] = 1;
* sqliteを使用する場合は、定義と初期化が可能 $useQuotesSybase['sqlite'] = 1;
* mysqlを使用する場合は、$useQuotesSybase['sqlite]の定義と初期化が可能' ] = 0;
*
* CONFIG_DB_DBMS は使用する DBMS の定数であり、別の場所で定義されます。たとえば、define('CONFIG_DB_DBMS', 'mysql');
*
* @author 流水梦春cmpan(at)qq.com
* @link http://lib.culog.cn
* $date 2007.11.18
*/
error_reporting(E_ALL);
set_magic_quotes_runtime(0);
define('CONFIG_DB_DBMS', 'sqlite'); // 使用

// ' を使用します。
$useQuotesSybase = array();
$useQuotesSybase['sqlite'] = 1;
$useQuotesSybase[' sybase'] = 1;

if(!empty($_POST)) $_POST = array_map('quotesOuterVars', $_POST);
if(!empty($_GET)) $_GET = array_map ('quotesOuterVars', $_GET);
$_COOKIE = array_map('quotesOuterVars', $_COOKIE);
$_REQUEST = array_map('quotesOuterVars', $_REQUEST);

function quotesOuterVars( $var) {
if (is_array($var)) {
return array_map('quotesOuterVars',$var);
} else {
if (get_magic_quotes_gpc()) {
if (isset($GLOBALS['useQuotesSybase'][CONFIG_DB_DBMS]) && $GLOBALS['useQuotesSybase'][CONFIG_DB_DBMS]) {
//当面必要です ' である转义符
//結果、magic_quotes_sybase = オフ、システム统将把外部变量addslashes, 我们得先stripslashes
//否则系统自动掌 ' 换成 '',
if (!ini_get('magic_quotes_sybase')) {
$var = ストリップスラッシュ($var );
$var = str_replace("'", """, $var);
}
} else {
/である转义符
/ / 如果 magic_quotes_sybase = オン、我们先掴 '' 替え换成 '、その後にまつげを追加します
// 否则系统自アニメーション引用
if (ini_get('magic_quotes_sybase')) {
$var = str_replace("' ", "''", $var);
$var =addlashes($var);
}
}
else{
if (isset($GLOBALS['useQuotesSybase' ][CONFIG_DB_DBMS]) && $GLOBALS['useQuotesSybase'][CONFIG_DB_DBMS]) {
$var = str_replace("'", "''", $var);
} else {
$var =addlashes($var);
}
}

return trim($var);
}
}


上の表から、magic_quotes_runtime については、プログラム内で ini_set('magic_quotes_runtime', 0); を使用することで無効にでき、独自のメソッドを使用してデータを処理できることがわかります。データベースまたはファイルのデータ。


魔法引用符構成オプション 説明 実行時の変更 PHP のデフォルト値は
magic_quotes_gpc オンにすると、HTTP リクエスト データ (GET、POST、COOKIE) に影響します。 できません オン
magic_quotes_runtime オンにすると、ほとんどのデータが外部ソースから取得されますまた、データベースやテキスト ファイルなど、関数によって返されるデータはバックスラッシュでエスケープされます。 (前提条件は、magic_quotes_gpc = On) Can Off
magic_quotes_sybase
  魔术引号配置选项   描述  运行时改变 在 PHP中的默认值为 
  magic_quotes_gpc 如果打开的话,影响到 HTTP 请求数据(GET,POST 和 COOKIE)。  不能  On
 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。(前提是magic_quotes_gpc = On)  能  Off
 magic_quotes_sybase

当关闭时,所有的 '(单引号),"(双引号),/(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。
    如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ''。而双引号、反斜线 和 NULL 字符将不会进行转义。 
(前提是magic_quotes_gpc = On)

 能  Off
いつオフにすると、すべての ' (一重引用符)、" (二重引用符)、/ (バックスラッシュ)、および NULL 文字はバックスラッシュで自動的にエスケープされます。これは、addslashes() と同じ効果があります。 オンにすると、一重引用符が使用されます。このオプションは、magic_quotes_gpc を完全にオーバーライドします。両方のオプションがオンの場合、一重引用符は '' としてエスケープされ、バックスラッシュと NULL 文字はエスケープされません。 (magic_quotes_gpc = On の場合) >
できます オフ
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
11ベストPHP URLショートナースクリプト(無料およびプレミアム)11ベストPHP URLショートナースクリプト(無料およびプレミアム)Mar 03, 2025 am 10:49 AM

多くの場合、キーワードと追跡パラメーターで散らかった長いURLは、訪問者を阻止できます。 URL短縮スクリプトはソリューションを提供し、ソーシャルメディアやその他のプラットフォームに最適な簡潔なリンクを作成します。 これらのスクリプトは、個々のWebサイトにとって価値があります

Laravelでフラッシュセッションデータを使用しますLaravelでフラッシュセッションデータを使用しますMar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、ReactLaravelのバックエンドでReactアプリを構築する:パート2、ReactMar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

Laravelテストでの簡略化されたHTTP応答のモッキングLaravelテストでの簡略化されたHTTP応答のモッキングMar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

PHPのカール:REST APIでPHPカール拡張機能を使用する方法PHPのカール:REST APIでPHPカール拡張機能を使用する方法Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Codecanyonで12の最高のPHPチャットスクリプトCodecanyonで12の最高のPHPチャットスクリプトMar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

2025 PHP状況調査の発表2025 PHP状況調査の発表Mar 03, 2025 pm 04:20 PM

2025 PHP Landscape Surveyは、現在のPHP開発動向を調査しています。 開発者や企業に洞察を提供することを目的とした、フレームワークの使用、展開方法、および課題を調査します。 この調査では、現代のPHP Versioの成長が予想されています

Laravelの通知Laravelの通知Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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