ホームページ データベース SQL SQLインジェクションの詳細な紹介

SQLインジェクションの詳細な紹介

Aug 06, 2019 pm 05:06 PM
sql

SQLインジェクションの詳細な紹介

1. まず SQL インジェクションの原理を理解します:

SQL インジェクション: SQL コマンドをWeb フォームを送信するか、ページ要求のドメイン名またはクエリ文字列を入力して、最終的にサーバーをだまして悪意のある SQL コマンドを実行させます。

具体的には、既存のアプリケーションを使用して、バックエンドのデータベース エンジンに (悪意のある) SQL コマンドを挿入して実行する機能であり、Web フォームに (悪意のある) SQL ステートメントを入力することで存在を取得できます。設計者が意図したとおりに SQL ステートメントを実行するのではなく、Web サイト上のデータベースで実行されます。たとえば、これまでの多くの映画やテレビの Web サイトでは、主に WEB フォームを通じてクエリ文字を送信することによって VIP 会員のパスワードが漏洩していましたが、このようなフォームは特に SQL インジェクション攻撃に対して脆弱です。 (Baidu より)

つまり、Web サイトのページにはデータベースと対話する部分 (ニュース Web サイトの検索機能など) が含まれており、Web サイトにデータが入力されると、そのデータはこのプロセス中、Web サイト開発者は、データベースに渡される対応するデータに対してセキュリティ処理 (特殊文字のフィルタリング、エンコードなど) を実行しなかったため、ハッカーが悪意のあるコード (つまり、不正なSQL文を含むSQLコマンド)がWebサイトのフロントエンドからデータベースに侵入し、データベース内でハッカー目的でこれらのSQL文を実行することにより、データベース情報の漏洩、被害等が引き起こされます。

2. SQL インジェクションの一般的な分類

インジェクション ポイントの種類による分類

(1) 番号タイプ インジェクション ポイント

多くの Web リンクは同様の構造をしています http://www.example.com/12.php?id=1 この形式に基づくインジェクションは、一般にデジタル インジェクション ポイントと呼ばれます。インジェクション ポイントの ID タイプが数値であるということです。ユーザーの個人情報の表示や記事の表示など、ほとんどの Web ページでは、この形式の構造を使用して ID やその他の情報を転送し、それをバックエンドに渡します。データベースからクエリを実行すると、対応する情報がフロント デスクに返されます。このタイプの SQL ステートメントのプロトタイプは、おそらく select * from table name where id=1 です。インジェクションがある場合は、ブラスト用に次のような SQL インジェクション ステートメントを構築できます: select * from table name where id=1 and 1 =1

(2) 文字挿入ポイント

Web リンクも同様の構造です http://xwww.example.com/users.php?user=adminこのフォームでは、その注入ポイントのユーザー タイプが文字タイプであるため、文字注入ポイントと呼ばれます。このタイプの SQL ステートメントのプロトタイプは、おそらく select * from table name where user='admin' です。数値注入タイプの SQL ステートメントのプロトタイプと比較して、より多くの引用符 (一重引用符または二重引用符が使用できる) があることに注意してください。 。インジェクションがある場合は、ブラスト用に次のような SQL インジェクション ステートメントを構築できます: select * from table name where user='admin' and 1=1 ' これらの煩わしい引用符を取り除く必要があります。

(3) 注入ポイントの検索

これは特殊なタイプの注入です。このタイプのインジェクションは主に、データ検索を実行するときに検索パラメータをフィルタリングしないことを指します。一般的に、リンク アドレスには「keyword=keyword」が含まれます。リンク アドレスには表示されず、検索ボックス フォームから直接送信されるものもあります。このタイプのインジェクション ポイントによって送信される SQL ステートメントのプロトタイプは、大まかに次のとおりです。 select * from table name where field like '%keyword%' インジェクションがある場合は、ブラスト用に次のような SQL インジェクション ステートメントを構築できます。 select * from table Name where field like '%test%' and '%1%'='%1%'

3. SQL インジェクションがあるかどうかを判断できれば (初心者向けの概要、参照のみ)

簡単に言うと:

すべての入力は、データベースと対話する限り SQL インジェクションをトリガーする可能性があります

SQL インジェクションは

(1) GET インジェクション : データの送信方法は GET で、インジェクション ポイントの場所は GET パラメータ部分にあります。 。たとえば、http://xxx.com/news.php?id=1 というリンクがあります。id は注入ポイントです。

(2) POST インジェクション: POST メソッドを使用してデータを送信します。インジェクション ポイントは、フォーム内でよく発生する POST データ部分にあります。

(3) Cookie インジェクション: HTTP リクエストはクライアントの Cookie を取得します。インジェクション ポイントは Cookie 内の特定のフィールドに存在します。

(4) HTTP ヘッダー インジェクション : インジェクション ポイントは、HTTP リクエスト ヘッダーの特定のフィールドにあります。たとえば、これは [User-Agent] フィールドに存在します。厳密に言うと、Cookie は実際にはヘッダー インジェクションの一種と考えるべきです。 HTTP リクエスト中、Cookie はヘッダー内のフィールドであるためです。

送信方法に従って分類すると、SQL インジェクションが発生する最も長い場所は、リンク アドレス、データ パラメーター、Cookie 情報、および HTTP リクエスト ヘッダーであることがわかります。

SQL インジェクションが存在する可能性がある場所を理解した後、これらの場所で SQL インジェクションをトリガーできるかどうかを判断する必要があります。最も簡単な方法は、フィールドに and 1=1 (および and 1=1 の変換された形式) を入力することです。該当箇所の判断を致します。さまざまな注入ポイントのタイプでは、文字タイプに対して一重引用符を適切に追加する必要がありますが、数値注入ポイントには追加する必要はありません。

4. SQL インジェクションの高度な分類 (実行効果による分類)

(1) ブールベースのブラインド インジェクション: つまり、返されたページに基づいて true 条件と false 条件の挿入を判断できます。

(2) 時間ベースのブラインドインジェクション: つまり、ページから返されたコンテンツに基づいて情報を判断することはできません。時間遅延ステートメントが実行されるかどうかを条件文を使用して確認します。 (つまり、ページの戻り時間が増加するかどうか)。

(3) エラーレポートに基づくインジェクション: つまり、ページはエラー情報を返すか、インジェクトされたステートメントの結果がページに直接返されます。

(4) ユニオンクエリインジェクション: ユニオンの場合のインジェクションが利用可能です。

(5) ヒープクエリインジェクション: 複数のステートメントのインジェクションを同時に実行できます。

(6) ワイドバイトインジェクション: gbk の使用はマルチバイトエンコーディングであり、2 バイトが中国語の文字を表します

この記事は学習のみを目的としています。他人の Web サイトを悪意を持って攻撃しないでください。

推奨チュートリアル: SQL オンライン ビデオ チュートリアル

以上がSQLインジェクションの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Hibernate フレームワークにおける HQL と SQL の違いは何ですか? Apr 17, 2024 pm 02:57 PM

HQL と SQL は Hibernate フレームワークで比較されます。HQL (1. オブジェクト指向構文、2. データベースに依存しないクエリ、3. タイプ セーフティ)、SQL はデータベースを直接操作します (1. データベースに依存しない標準、2. 複雑な実行可能ファイル)。クエリとデータ操作)。

Oracle SQLでの除算演算の使用法 Oracle SQLでの除算演算の使用法 Mar 10, 2024 pm 03:06 PM

「OracleSQLでの除算演算の使用方法」 OracleSQLでは、除算演算は一般的な数学演算の1つです。データのクエリと処理中に、除算演算はフィールド間の比率を計算したり、特定の値間の論理関係を導出したりするのに役立ちます。この記事では、OracleSQL での除算演算の使用法を紹介し、具体的なコード例を示します。 1. OracleSQL における除算演算の 2 つの方法 OracleSQL では、除算演算を 2 つの異なる方法で実行できます。

Oracle と DB2 の SQL 構文の比較と相違点 Oracle と DB2 の SQL 構文の比較と相違点 Mar 11, 2024 pm 12:09 PM

Oracle と DB2 は一般的に使用される 2 つのリレーショナル データベース管理システムであり、それぞれに独自の SQL 構文と特性があります。この記事では、Oracle と DB2 の SQL 構文を比較し、相違点を示し、具体的なコード例を示します。データベース接続 Oracle では、次のステートメントを使用してデータベースに接続します: CONNECTusername/password@database DB2 では、データベースに接続するステートメントは次のとおりです: CONNECTTOdataba

MyBatis動的SQLタグのSetタグ機能の詳細説明 MyBatis動的SQLタグのSetタグ機能の詳細説明 Feb 26, 2024 pm 07:48 PM

MyBatis 動的 SQL タグの解釈: Set タグの使用法の詳細な説明 MyBatis は、豊富な動的 SQL タグを提供し、データベース操作ステートメントを柔軟に構築できる優れた永続層フレームワークです。このうち、Set タグは、UPDATE ステートメントで SET 句を生成するために使用され、更新操作でよく使用されます。この記事では、MyBatis での Set タグの使用法を詳細に説明し、特定のコード例を通じてその機能を示します。 SetタグとはMyBatiで使用するSetタグです。

SQL の ID 属性は何を意味しますか? SQL の ID 属性は何を意味しますか? Feb 19, 2024 am 11:24 AM

SQL における Identity とは何ですか? 具体的なコード例が必要です。SQL では、Identity は自動インクリメント数値の生成に使用される特別なデータ型です。多くの場合、テーブル内のデータの各行を一意に識別するために使用されます。 Identity 列は、各レコードが一意の識別子を持つようにするために、主キー列と組み合わせてよく使用されます。この記事では、Identity の使用方法といくつかの実用的なコード例について詳しく説明します。 Identity の基本的な使用方法は、テーブルを作成するときに Identity を使用することです。

SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 SQL ステートメントを使用せずに Springboot+Mybatis-plus を実装して複数のテーブルを追加する方法 Jun 02, 2023 am 11:07 AM

Springboot+Mybatis-plus が SQL ステートメントを使用して複数テーブルの追加操作を実行しない場合、私が遭遇した問題は、テスト環境で思考をシミュレートすることによって分解されます: パラメーターを含む BrandDTO オブジェクトを作成し、パラメーターをバックグラウンドに渡すことをシミュレートします。 Mybatis-plus で複数テーブルの操作を実行するのは非常に難しいことを理解してください。Mybatis-plus-join などのツールを使用しない場合は、対応する Mapper.xml ファイルを設定し、臭くて長い ResultMap を設定するだけです。対応する SQL ステートメントを記述します。この方法は面倒に見えますが、柔軟性が高く、次のことが可能です。

SQL の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

解決策: 1. ログインしているユーザーがデータベースにアクセスまたは操作するための十分な権限を持っているかどうかを確認し、ユーザーが正しい権限を持っているかどうかを確認します; 2. SQL Server サービスのアカウントに指定されたファイルまたはデータベースにアクセスする権限があるかどうかを確認します。 3. 指定されたデータベース ファイルが他のプロセスによって開かれているかロックされているかどうかを確認し、ファイルを閉じるか解放して、クエリを再実行します。管理者として試してください。Management Studio をなどとして実行します。

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか? Dec 17, 2023 am 08:41 AM

MySQL でデータの集計と統計に SQL ステートメントを使用するにはどうすればよいですか?データの集計と統計は、データ分析と統計を実行する際の非常に重要な手順です。 MySQL は強力なリレーショナル データベース管理システムとして、データの集約と統計操作を簡単に実行できる豊富な集約機能と統計機能を提供します。この記事では、SQL ステートメントを使用して MySQL でデータの集計と統計を実行する方法を紹介し、具体的なコード例を示します。 1. カウントには COUNT 関数を使用します。COUNT 関数は最も一般的に使用されます。

See all articles