ホームページ バックエンド開発 PHPチュートリアル SQLインジェクションの脆弱性を効果的に防ぐ方法を詳しく解説_PHPチュートリアル

SQLインジェクションの脆弱性を効果的に防ぐ方法を詳しく解説_PHPチュートリアル

Jul 13, 2016 pm 05:09 PM
sql する 動的 含む パラメータ 効率的 注射 抜け穴 詳しい 声明 説明する 防ぐ

1. 動的に構築された SQL ステートメントにパラメーターが含まれている場合は、パラメーターに対して次の操作を実行してください。 a. '(一重引用符) を ''(2 つの一重引用符) に置き換えます
b. -- (コメント文字) を置き換えます
c. ステートメントにパラメーターを追加する場合は、必ず前後に引用符を追加してください。「select * from table where id='''+@id+'''' などの追加
」 2. 動的に構築された SQL ステートメントにテーブル パラメーターが含まれている場合は、次のようにテーブルに [] (角括弧) を追加しないでください。 'select * from ['+@tab+']'

3. 動的 SQL ステートメントを避ける: 特に、IE クライアントからクエリ、変更、削除条件を取得するフィールドは、挿入される可能性が最も高くなります。たとえば、上記のクライアントから取得した personid は、クライアントから取得した persongid として直接使用されます。開発の便宜上、SQL ステートメントの条件では personid に対して必要なチェックが行われないため、開発中に SQL ステートメントを実行する場合は、PreparedStatement クラスを使用することをお勧めします。

4. データの検証: クライアント IE で Web ページの特殊効果を使用してユーザー入力データの正当性を検証することは、実際にはあまり効果的ではありません。開発者は、ユーザーがデータを厳密に検証できると想定すべきではありません。法的データを入力します。アプリケーション内のセミコロン、引用符、括弧、SQL キーワードなどを必ず確認してください。正規表現を使用すると、複雑なパターン マッチングを実行でき、正規表現を使用すると良好な結果が得られます。

××× Web サイトのアドレス帳表示プログラムは、personid を渡す必要があります。アドレス帳表示プログラムは、データの正当性の検証を行わずに personid を直接取得し、personid は文字列変数であるため、personid は url パラメータを通じて渡すことができます。 personid を取得するコードは次のとおりです:

if (getparameter(req,"personid")!=null){

personid=getparameter(req,"personid").trim();

}その他{

personid="";

}

このプログラムで結合される動的 SQL ステートメントは次のとおりです:

personsql="select * from table name where userid="+long.tostring(userid)+" and addrcontactid="+personid;

プログラムは personid が整数であるかどうかをチェックしないため、攻撃者が次の URL を入力すると、personid に値を無造作に割り当て、後続のプログラム ロジックを実行し続けることができます。

http://www.----------------------?personid=6414 または 2=2

結合された SQL ステートメントは次のとおりです:

userid=1433620 および addrcontactid=6414 または 2=2 のテーブル名から * を選択

予防方法

SQL インジェクションの脆弱性は、「数千マイルの堤防がアリの巣の中で崩壊する」と言えます。この種の脆弱性は、通常、プログラマのインジェクションに対する理解の欠如によって引き起こされます。プログラムのフィルタリングが厳密でないか、特定のパラメータのチェックが忘れられています。ここでは、ASP チュートリアルの request 関数を置き換える関数を紹介します。関数は次のとおりです。

関数セーフリクエスト(paraname,paratype)

'--- パラメータを渡す ---
'paraname: パラメータ名 - 文字型

'paratype: パラメーターの型 - 数値型 (1 は上記のパラメーターが数値であることを意味し、0 は上記のパラメーターが文字であることを意味します)

薄暗いパラバリュー
paravalue=リクエスト(パラメータ名)

paratype=1 の場合

isnumeric(paravalue) でない場合は
response.write "パラメータ" & paraname & "数値型でなければなりません!" response.end

の場合は終了 それ以外は
paravalue=replace(paravalue,"'","''")

したら終了 セーフリクエスト=パラバリュー
関数終了


上記機能の応用

記事のIDなどのint型パラメータの場合、まずそれが整数であるかどうかを判断できます。

id =trim(request("id"))

if id<>"" then

数値(id)でない場合は
Response.write「数値パラメータを入力してください」

応答.終了
終了したら
id = clng(id)
それ以外
response.write「パラメータIDを入力してください」
応答.終了
終了したら



http://www.bkjia.com/PHPjc/629725.html

www.bkjia.com

http://www.bkjia.com/PHPjc/629725.html技術記事 1. 動的に構築された SQL ステートメントにパラメーターが含まれている場合は、パラメーターに対して次の操作を実行します。 a. ' (一重引用符) を '' (2 つの一重引用符) に置き換えます。 b. -- (コメント文字) を c. に置き換えます。ステートメントにパラメーターを追加する場合...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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. 複雑な実行可能ファイル)。クエリとデータ操作)。

VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換します Mar 25, 2024 am 09:36 AM

仮想マシンを作成するときに、ディスクの種類を選択するように求められます。固定ディスクまたはダイナミック ディスクを選択できます。固定ディスクを選択した後でダイナミック ディスクが必要であることに気付いた場合、またはその逆の場合はどうすればよいでしょうか? いいですね!一方をもう一方に変換できます。この記事では、VirtualBox 固定ディスクをダイナミック ディスクに、またはその逆に変換する方法を説明します。ダイナミック ディスクは、最初は小さいサイズですが、仮想マシンにデータを保存するにつれてサイズが大きくなる仮想ハード ディスクです。ダイナミック ディスクは、必要なだけのホスト ストレージ スペースのみを使用するため、ストレージ スペースを節約するのに非常に効率的です。ただし、ディスク容量が増加すると、コンピュータのパフォーマンスがわずかに影響を受ける可能性があります。仮想マシンでは固定ディスクとダイナミック ディスクが一般的に使用されます

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 の 5120 エラーを解決する方法 SQL の 5120 エラーを解決する方法 Mar 06, 2024 pm 04:33 PM

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

C++ 関数パラメータの型の安全性チェック C++ 関数パラメータの型の安全性チェック Apr 19, 2024 pm 12:00 PM

C++ パラメーターの型の安全性チェックでは、コンパイル時チェック、実行時チェック、静的アサーションを通じて関数が予期される型の値のみを受け入れるようにし、予期しない動作やプログラムのクラッシュを防ぎます。 コンパイル時の型チェック: コンパイラは型の互換性をチェックします。実行時の型チェック:dynamic_cast を使用して型の互換性をチェックし、一致しない場合は例外をスローします。静的アサーション: コンパイル時に型条件をアサートします。

データベース技術コンテスト: Oracle と SQL の違いは何ですか? データベース技術コンテスト: Oracle と SQL の違いは何ですか? Mar 09, 2024 am 08:30 AM

データベース技術コンテスト: Oracle と SQL の違いは何ですか?データベース分野では、Oracle と SQL Server の 2 つは非常に評判の高いリレーショナル データベース管理システムです。どちらもリレーショナル データベースのカテゴリに属しますが、両者の間には多くの違いがあります。この記事では、Oracle と SQL Server の違い、実際のアプリケーションにおけるそれらの機能と利点について詳しく説明します。まず、Oracle と SQL Server の間には構文に違いがあります。

See all articles