HP+MYSQL Web サイト SQL インジェクションの攻撃と防御
WebjxCom ヒント: プログラマは、コードを記述するときに TDD (テスト駆動開発) に注意します。関数を実装する前に、まずテスト ケースを記述し、次にそれを実行するコードを記述します。実際、ハッカーが SQL インジェクションを実行するとき、それは TDD プロセスでもあります。彼らはまずプログラムにエラーを報告させようとし、次にプログラムが再び正常に実行されると、インジェクションが続きます | 。
プログラマは、コードを記述するときに TDD (テスト駆動開発) に注意します。関数を実装する前に、まずテスト ケースを記述し、次にそれを実行するコードを記述します。実際、ハッカーが SQL インジェクションを実行するときも、TDD プロセスです。ハッカーはまずプログラムにエラーを報告させようとし、次にプログラムが再度正常に実行されると、インジェクションは成功します。 。
攻撃:
プログラムに次のようなスクリプトがあるとします。
$sql = "SELECT id, title, content FROM Articles WHERE id = {$_GET[''id'']}";
通常のアクセス時URL は次のとおりです:
/articles.php?id=123
ハッカーが SQL インジェクションの脆弱性があるかどうかを確認したい場合、最も一般的な方法は、整数 ID の後に一重引用符を追加することです:
/articles。 php?id=123''
$_GET[''id''] パラメーターをフィルターしていないため、次のような情報のようなエラーが必然的に報告されます:
指定された引数は有効な MySQL 結果ではありませんリソース...
この情報は、スクリプトの存在を示すのに十分です抜け穴があります。いくつかのトリックを使用できます:
/articles.php?id=0 Union select 1,2,3
1 の理由2,3 が選択されるのは、union では両側のフィールドの数が一致している必要があり、前にタイトルとコンテンツの 3 つのフィールドがあり、その後に 1、2、3 が続くため、構文エラーは発生しません。また、存在しないレコードとして id=0 が設定されている場合、クエリ結果は 1、2、3 となり、Web ページ上では元の ID が表示される場所に 1 が表示され、2 が表示されます。タイトル表示部分には が表示され、内容表示部分には 3 が表示されます。
継続して使用する方法は、magic_quotes_gpcの設定に依存します:
magic_quotes_gpcがオフの場合:
/articles.php?id=0 Union select 1,2,load_file(''/etc/passwd' ')
これがその仕組みです。その結果、/etc/passwd ファイルの内容が、最初に表示されていた場所に表示されます。
magic_quotes_gpc がオンの場合:
このとき、load_file(''/etc/passwd'') を直接使用すると、一重引用符がエスケープされるため無効になりますが、方法はあります:
/articles.php ?id =0 Union select 1,2,load_file(char(47,101,116,99,47,112,97,115,115,119,100))
数値は /etc/passwd 文字列の ASCII です。文字列の各文字はループ ord(. ..)
ただし、文字列の 16 進形式も使用できると思います。文字列の各文字は循環的に出力されます dechex(ord(...))
/articles.php?id=0 Union select 1,2, load_file(0x2f6574632f706173737764)
ここで紹介する数値パラメータの攻撃方法は氷山の一角に過ぎません。文字列パラメータなどの攻撃方法については、以下のドキュメントリンクを参照してください。
防御:
GreenSQL など、SQL インジェクション ファイアウォールに似たソフトウェアがインターネット上で利用可能です。Web サイトが SQL インジェクション攻撃を受け始めた場合、そのようなショートカット ツールを使用すると命を救える場合があります。プロキシの役割は、そのアーキテクチャに多くの課題を抱えているため、Web サイトの同時パフォーマンスに影響を与える可能性が高いため、プロキシを選択するかどうかを選択するときは、客観的な条件に基づいて慎重に決定することが最善です。多くの場合、専門的なソフトウェアは必要なく、軽量なソリューションが多数あります。ここでは、awk を使用して潜在的な脆弱性を検出する方法を示します。
次の内容を含む detect_sql_injection.awk スクリプトを作成します (内容をコピーする場合は、行番号を含めないでください):
01 #!/bin/gawk -f
02
03 /$_(GET|POST| COOKIE|REQUEST)s *[/ {
04 IGNORECASE = 1
05 if (match($0, /$.*(sql|query)/)) {
06 IGNORECASE = 0
07 Output()
08 next
09 }
10 }
11
12 function Output()
13 {
14 $1 = $1
15 print "CRUD: " $0 "nFILE: " FILENAME "nLINE: " FNR "n"
16 }
このスクリプトは問題に一致します次のようなコードを使用すると、猫や虎のように if match ステートメントを記述するだけで、マッチング モードを拡張するのが簡単になります。
1: $sql = "SELECT * FROM users WHERE username = ''{$_POST[''username'']}''";
2: $res = mysql_query("SELECT * FROM users WHERE username = ''{ $_POST[''username'']}''");
使用する前に chmod +x detect_sql_injection.awk を忘れないでください。呼び出し方法は 2 つあります:
1: ./detect_sql_injection.awk /path/to/ php/ script/file
2: find /path/to/php/script/directory -name "*.php" xargs ./detect_sql_injection.awk
は、次のように問題のあるコード情報を表示します。
CRUD: $sql = "SELECT * FROM users WHERE username = ''{$_POST[''username'']}''";
FILE: /path/to/file.php
LINE: 123
このスクリプトの応用例は次のとおりです。実環境 CRON を介してプログラムのソース ファイルを定期的にスキャンしたり、SVN が送信されたときにフック メソッドを介して自動的に照合したりする方法。
専門的なツールを使用する場合でも、スクリプトを検出する場合でも、問題の根本は常にプログラマーが必要なセキュリティ意識を持っているかどうかに依存します。
1: デジタル タイプのパラメーターを使用します。 intval や floatval などのメソッドを使用してフィルタリングを強制します。
2: mysql_real_escape_string などのメソッドを使用して、単純なaddslashesの代わりにフィルタ文字列パラメータを強制します。
3: mysql_query などのスプライシング SQL クエリ メソッドを放棄し、可能な限り PDO のバインディング準備メソッドを使用するのが最善です。
4: 書き換えテクノロジーを使用して実際のスクリプトとパラメーターの情報を隠し、通常の書き換えルールを通じて疑わしいパラメーターをフィルターします。
5: エラー プロンプトをオフにし、機密情報を攻撃者に提供しないようにします: display_errors=off。
6: エラー情報をログの形式で記録します: log_errors= />7: MySQL への接続に FILE 権限を持つアカウント (root など) を使用しないでください。これにより、load_file などの危険な関数が保護されます。
8:...
Web サイトのセキュリティは実際には複雑ではありません。入力をフィルターし、出力をエスケープするという 1 つの文に要約できます。このうち、これまで議論してきた SQL インジェクションの問題は入力のフィルタリングの問題に属し、出力のエスケープの問題としてはクロスサイト スクリプティングが代表的ですが、この記事の範囲には入らないので説明します。それについてはこれ以上は言いません。
ドキュメント:
addslashes() と mysql_real_escape_string()
MySQL を使用した SQL インジェクション
MySQL を使用した高度な SQL インジェクション
MySQL インジェクションでエクスポートされたフィールド コンテンツに関する研究 - インジェクションによる WebShell のエクスポート
転載元: http://www.aspnetjia.com /Cont-328.html
上記は、HP+MYSQL Web サイトでの SQL インジェクションの攻撃と防御を、関連コンテンツも含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

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

ホットトピック









ログイン画面に「組織から PIN の変更を求められています」というメッセージが表示されます。これは、個人のデバイスを制御できる組織ベースのアカウント設定を使用しているコンピューターで PIN の有効期限の制限に達した場合に発生します。ただし、個人アカウントを使用して Windows をセットアップした場合、エラー メッセージは表示されないのが理想的です。常にそうとは限りませんが。エラーが発生したほとんどのユーザーは、個人アカウントを使用して報告します。私の組織が Windows 11 で PIN を変更するように要求するのはなぜですか?アカウントが組織に関連付けられている可能性があるため、主なアプローチはこれを確認することです。ドメイン管理者に問い合わせると解決できます。さらに、ローカル ポリシー設定が間違っていたり、レジストリ キーが間違っていたりすると、エラーが発生する可能性があります。今すぐ

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

画面の明るさは、最新のコンピューティング デバイスを使用する上で不可欠な部分であり、特に長時間画面を見る場合には重要です。目の疲れを軽減し、可読性を向上させ、コンテンツを簡単かつ効率的に表示するのに役立ちます。ただし、設定によっては、特に新しい UI が変更された Windows 11 では、明るさの管理が難しい場合があります。明るさの調整に問題がある場合は、Windows 11 で明るさを管理するすべての方法を次に示します。 Windows 11で明るさを変更する方法【10の方法を解説】 シングルモニターユーザーは、次の方法でWindows 11の明るさを調整できます。これには、ラップトップだけでなく、単一のモニターを使用するデスクトップ システムも含まれます。はじめましょう。方法 1: アクション センターを使用する アクション センターにアクセスできる

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

iOS 17 では、Apple はモバイル オペレーティング システムにいくつかの新しいプライバシーおよびセキュリティ機能を導入しました。その 1 つは、Safari のプライベート ブラウジング タブに対して 2 段階認証を要求する機能です。その仕組みとオフにする方法は次のとおりです。 iOS 17 または iPadOS 17 を実行している iPhone または iPad では、Safari でプライベート ブラウズ タブを開いていて、再度アクセスするためにセッションまたはアプリを終了する場合、Apple のブラウザでは Face ID/Touch ID 認証またはパスコードが必要になります。言い換えれば、ロックが解除されている iPhone または iPad を誰かが手に入れても、パスコードを知らなければプライバシーを閲覧することはできません。

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

有名なアクティベーション スクリプト MAS2.2 バージョンでは、デジタル アクティベーションが再びサポートされています。このメソッドは @asdcorp とそのチームが考案したもので、MAS 作成者はそれを HWID2 と呼んでいます。 https://github.com/massgravel/Microsoft-Activation-Scripts から Gatherosstate.exe (オリジナルではなく、変更されたもの) をダウンロードし、パラメータを指定して実行し、AuthenticTicket.xml を生成します。まず元のメソッド: Gatherosstate.exePfn=xxxxxxx;DownlevelOriginalState=1 を確認し、次に最新のメソッド: Gatheros と比較します。

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