php_PHPチュートリアルでのSQLインジェクションの詳細説明と防止
1 つは入力データがフィルターされていない (フィルター入力) こと、もう 1 つはデータベースに送信されるデータがエスケープされていない (エスケープ出力) ことです。これら 2 つの重要な手順は不可欠であり、プログラム エラーを減らすために特別な注意が必要です。
攻撃者にとって、SQL インジェクション攻撃を実行するには、思考と実験が必要です。データベース ソリューションについて十分に根拠のある推論を行うことが非常に必要です (もちろん、攻撃者がソース プログラムとデータベース ソリューションを参照できないことを前提としています)。次の単純なログイン フォームを考えてみましょう。 :
攻撃者として、彼はクエリ ステートメントを推測してユーザー名とパスワードを確認することから始めます。ソースファイルを見ることで、彼はあなたの習慣を推測し始めることができます。
たとえば、名前の習慣。通常、フォーム内のフィールド名はデータ テーブル内のフィールド名と同じであると想定されます。もちろん、それらが異なることを保証することが、必ずしも信頼できるセキュリティ対策であるとは限りません。
最初の推測として、通常は次の例のクエリを使用します:
$password_hash = md5($_POST['password ']);
$sql = "SELECT count(*)
FROM users
WHERE username = '{$_POST['username']}'
AND パスワード = '$password_hash'";
ユーザー パスワードの MD5 値を使用する これは以前は一般的な方法でしたが、現在は特に安全ではありません。最近の研究では、MD5 アルゴリズムには欠陥があり、多数の MD5 データベースによって MD5 逆クラッキングの難易度が低下していることが示されています。デモを見るには http://md5.rednoize.com/ にアクセスしてください (原文どおり。山東大学の Wang Xiaoyun 教授の研究によると、MD5 の「衝突」、つまり、衝突を引き起こす 2 つの異なるファイルと単語がすぐに見つかることがわかっています。ただし、この結果によると、上記の特殊な場合に md5 を直接使用するのは危険です。)
$password_hash = md5($salt . md5($_POST['password'] . $salt));
?>
もちろん、攻撃者は最初からそれを正しく推測できない可能性があり、多くの場合、それを正しく推測する必要があります。いくつかの実験をしてください。実験するより良い方法は、ユーザー名として一重引用符を入力することです。これにより、重要な情報が公開される可能性があります。多くの開発者は、Mysql ステートメントの実行中にエラーが発生したときに、関数 mysql_error() を呼び出してエラーを報告します。以下の例を参照してください:
?>
ただし、これはこのメソッドは開発中です。非常に便利ですが、重要な情報が攻撃者に公開される可能性があります。攻撃者がユーザー名として一重引用符を使用し、パスワードとして mypass を使用した場合、クエリ ステートメントは次のようになります:
FROM ユーザー
where username = '' '
andpassword =' A029d0df84EB5549C641E04A9EF389E5 '";
? & GT; 以下のように :
SQL 構文にエラーがあります。使用している言語に対応するマニュアルを確認してください。 'WHERE username = ''' AND
コードは次のとおりです:
A mypass がパスワードとして使用されていると仮定すると、クエリ全体は次のようになります:
$ sql = "select *
users
where username = 'myuser' OR 'FOO' = 'FOO' --
And Password = 'A029d0df84EB5549C641E04A9EF389E5' ";
? & gt; 幸いなことに、SQL インジェクションは簡単に回避できます。前に述べたように、入力をフィルタリングし、出力をエスケープする必要があります。
どちらのステップも省略することはできませんが、いずれかのステップを実装すると、ほとんどの SQL インジェクションのリスクを排除できます。出力をエスケープせずに入力をフィルタリングするだけの場合、データベース エラーが発生する可能性があります (正当なデータも SQL クエリの正しい形式に影響を与える可能性があります)。ただし、これも信頼性が低く、正当なデータによって SQL の動作が変わる可能性もあります。声明。一方、入力をフィルタリングせずに出力をエスケープすると、データが SQL ステートメントの形式に影響を与えないようにすることができ、多くの一般的な SQL インジェクション攻撃手法も防ぐことができます。
コードをコピーします
$clean[ 'last_name'] = "オライリー";
$mysql['last_name'] = mysql_real_escape_string($clean['last_name']);
$sql = "INSERT
INTO user (last_name)
VALUES ('{$ mysql['last_name']}')";
?>
データベース用に設計されたエスケープ関数を使用してみてください。そうでない場合は、addslashes() 関数を使用することが最終的でより良い方法です。
SQL ステートメントの構築に使用されるすべてのデータが適切にフィルタリングされ、エスケープされると、SQL インジェクションのリスクが実際に回避されます。パラメータ化されたクエリとプレースホルダ (PEAR::DB、PDO など) をサポートするデータベース操作クラスを使用している場合、追加の保護層が得られます。以下の PEAR::DB の使用例を参照してください:
コードをコピーします
VALUES (?) ';
$ dbh->query($sql, array($clean['last_name']));
?>
上記の例のデータはクエリ ステートメントの形式に直接影響を与えることができないため、 SQL インジェクションのリスクが軽減されます。 PEAR::DB はデータベースの要件に従って自動的にエスケープするため、出力をフィルタリングするだけで済みます。
パラメータ化されたクエリステートメントを使用している場合、入力コンテンツはデータとしてのみ処理されます。これにより、エスケープする必要がなくなりますが、出力をエスケープする習慣を守りたい場合は、エスケープすることが必要な手順であると考えることもできます。実際、この時点で変換する必要がある特殊文字がないため、この時点でエスケープするかどうかは基本的に影響しません。パラメーター化されたクエリは、SQL インジェクションの防止に関してプログラムに強力な保護を提供します。
http://www.bkjia.com/PHPjc/825126.html

ホット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(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用してPHPの特定の文字列内の母音の数を計算する方法を学びます。英語の母音は、a、e、i、o、u、そしてそれらは大文字または小文字である可能性があります。 母音とは何ですか? 母音は、特定の発音を表すアルファベットのある文字です。大文字と小文字など、英語には5つの母音があります。 a、e、i、o、u 例1 入力:string = "tutorialspoint" 出力:6 説明する 文字列「TutorialSpoint」の母音は、u、o、i、a、o、iです。合計で6元があります

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。
