PHPインジェクション攻撃防御事例分析、PHPインジェクション事例分析_PHPチュートリアル
PHPインジェクション攻撃防御事例分析、PHPインジェクション事例分析
この記事では、例の形でインジェクション攻撃を防ぐ PHP の方法の詳細な分析を提供します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:
PHP はlashes() 関数を追加します -- 単一のアポストロフィとスラッシュエスケープ
PHP文字列関数
定義と使用法
addslashes() 関数は、指定された定義済み文字の前にバックスラッシュを追加します。
これらの事前定義された文字は次のとおりです:
一重引用符 (')
二重引用符 (")
バックスラッシュ ()
ヌル
文法:
スラッシュ(文字列)を追加します
パラメータ | 説明 |
文字列 | 必須。チェックする文字列を指定します。 |
ヒントとメモ
ヒント: この関数は、データベースに保存されている文字列やデータベース クエリ ステートメントに適切な文字列を準備するために使用できます。
注: デフォルトでは、PHP ディレクティブ magic_quotes_gpc がオンになっており、すべての GET、POST、COOKIE データに対して addslashes() が自動的に実行されます。 magic_quotes_gpc によってエスケープされた文字列に対して addslashes() を使用しないでください。二重エスケープが発生するためです。この状況が発生した場合は、関数 get_magic_quotes_gpc() を使用して検出できます。
例
この例では、文字列内の事前定義された文字にバックスラッシュを追加します。
echo $str . " これはデータベース クエリでは安全ではありません。
";
echo addedlashes($str) . " これはデータベース クエリでは安全です。";
?>
出力:
John Adams とは何ですか? これはデータベース クエリでは安全ではありません。
John Adams とは何ですか? これはデータベース クエリでは安全です。
get_magic_quotes_gpc 関数
{
$str = get_magic_quotes_gpc()?$str:addslashes($str);
$str;
を返します }
get_magic_quotes_gpc:
PHP 環境変数 magic_quotes_gpc の値を取得します。
構文: long get_magic_quotes_gpc(void);
戻り値: 長整数
関数の種類: PHP システム関数
コンテンツの説明:
この関数は、PHP環境に設定されている変数magic_quotes_gpc(GPC、Get/Post/Cookie)の値を取得します。 0 を返すとこの機能がオフになることを意味し、1 を返すとこの機能がオンになることを意味します。 magic_quotes_gpc が有効な場合、すべての ' (一重引用符)、" (二重引用符)、(バックスラッシュ)、およびヌル文字は、バックスラッシュを含むオーバーフロー文字に自動的に変換されます。
スラッシュを追加します -- バックスラッシュを使用して文字列を引用します
説明:文字列はスラッシュを追加します (文字列 str)
データベースクエリステートメントなどの特定の文字の前にバックスラッシュを追加した文字列を返します。これらの文字は、一重引用符 (')、二重引用符 (")、バックスラッシュ ()、および NUL (NULL 文字) です。
addslashes() の使用例は、データベースにデータを入力する場合です。たとえば、O'reilly という名前をデータベースに挿入するには、エスケープする必要があります。ほとんどのデータベースはエスケープ文字として O'reilly を使用します。これにより、余分な .html を挿入することなく、データがデータベースに保存されます。 PHP ディレクティブ magic_quotes_sybase が on に設定されている場合、' の挿入は ' でエスケープされることを意味します。
デフォルトでは、PHP 命令 magic_quotes_gpc がオンになっており、主にすべての GET、POST、COOKIE データに対してaddslashes() が自動的に実行されます。 magic_quotes_gpc によってエスケープされた文字列に対して addslashes() を使用しないでください。二重エスケープが発生するためです。この状況が発生した場合は、関数 get_magic_quotes_gpc() を使用して検出できます。
例 1.addslashes() の例
?>
get_magic_quotes_gpc()
この関数は、PHP 環境設定の変数 magic_quotes_gpc (GPC、Get/Post/Cookie) の値を取得します。 0 を返すとこの機能がオフになることを意味し、1 を返すとこの機能がオンになることを意味します。 magic_quotes_gpc がオンになっている場合、すべての ' (一重引用符)、" (二重引用符)、(バックスラッシュ)、およびヌル文字は、バックスラッシュを含むオーバーフロー文字に自動的に変換されます。
php.ini の magic_quotes_gpc については、オフまたはオンに設定する必要がありますか?
個人的な意見ですが、オンに設定する必要があります
要約は次のとおりです:
1. magic_quotes_gpc=on の場合、
入出力データベースの文字列データでは何もできませんaddslashes() およびtripslashes() の操作では、データは通常どおり表示されます。
このとき入力データに対してaddslashes()を実行すると、
次に、出力時にstripslashes()を使用して余分なバックスラッシュを削除する必要があります。
2.magic_quotes_gpc=offの場合
addslashes() はデータベースにバックスラッシュを書き込まないため、mysql が SQL ステートメントの実行を完了するのに役立つだけです。
追加:
magic_quotes_runtime スコープ: ファイルから読み取られたデータ、exec() の実行結果、または SQL クエリから取得されたデータ; アクションの時間: スクリプトが実行状態で生成されたデータにアクセスするたび
コード:
コードをコピーします
場合によっては、フォームに複数の変数 (場合によっては数十個) が送信されることがあります。では、addslashes() を何度もコピー&ペーストするのは少し面倒でしょうか?フォームやURLから取得したデータは$_POST、$_GETなどの配列の形で現れるので、「一掃」できる関数をカスタマイズします
*/
関数引用符($content)
{
//magic_quotes_gpc=Off の場合、処理を開始します
if (!get_magic_quotes_gpc()) {
// $content が配列かどうかを判断します
if (is_array($content)) {
// $content が配列の場合、その各要素を処理します
foreach ($content as $key=>$value) {
$content[$key] = ラッシュを追加します($value)
}
} その他 {
// $content が配列でない場合、一度だけ処理されます
追加スラッシュ($content)
}
} その他 {
//magic_quotes_gpc=On の場合、処理されません
}
// $content を返す
$content を返します。 }
?>
最も重要な点は、データ型をチェックしてエスケープすることだと思います。要約されたルールは次のとおりです。 php.ini の display_errors オプションは、display_errors = off に設定する必要があります。これにより、php スクリプトでエラーが発生した後は、Web ページにエラーが出力されなくなり、攻撃者による有用な情報の分析が防止されます。 mysql_query などの mysql 関数を呼び出すときは、mysql エラーが出力されないように、先頭に @ を追加する必要があります (@mysql_query(...))。攻撃者が有益な情報を分析できないようにする場合も同様です。さらに、一部のプログラマは、開発時に mysql_query エラーが発生したときにエラーと SQL ステートメントを出力することに慣れています。たとえば、 $t_strSQL = "SELECT a from b....";
if ( mysql_query($t_strSQL) ){// 正しい処理}else{echo "エラー! SQL ステートメント: $t_strSQL \r\nエラー メッセージ".mysql_query();exit;} このアプローチは非常に危険で愚かです。これを行う必要がある場合は、Web サイト設定ファイルでグローバル変数を設定するか、マクロを定義してデバッグ フラグを設定することをお勧めします。 グローバル設定ファイル内:
define("DEBUG_MODE",0); // 1: DEBUG MODE ; 0: RELEASE MODE
//呼び出しスクリプト内:
php /****************************** 説明: 決定渡された変数に $_POST、$_GET などの不正な文字が含まれているかどうか 関数: アンチインジェクション**************************/ // 不正な文字フィルタリングされる $ArrFiltrate=array ("'",";","union"); //エラー発生後にジャンプする URL がデフォルトで $StrGoUrl=""; //配列に値があるかどうか function FunStringExist($StrFiltrate ,$ArrFiltrate){ foreach ($ArrFiltrate as $key=>$value){ if (eregi($value,$StrFiltrate)){ returntrue; returnfalse; } // $_POST と $_GETif(function_exists(array_merge )){ $ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS) }else{ foreach($HTTP_POST_VARS as $key=>$value){ $ArrPostAndGet[ ]=$value; } foreach($HTTP_GET_VARS as $key=> ;$value){ $ArrPostAndGet[]=$value; } } //検証を開始します foreach($ArrPostAndGet as $key=>$value){ if ( FunStringExist($value,$ArrFiltrate)){ echo "alert(\ "不正な文字\");"; if (empty($StrGoUrl)){ echo &q...残りのテキスト>>

ホット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)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
