SQLインジェクションの脆弱性を効果的に防ぐ方法を詳しく解説_PHPチュートリアル
1. 動的に構築された SQL ステートメントにパラメーターが含まれている場合は、パラメーターに対して次の操作を実行してください。
a. '(一重引用符) を ''(2 つの一重引用符) に置き換えます
b. -- (コメント文字) を置き換えます
c. ステートメントにパラメーターを追加する場合は、必ず前後に引用符を追加してください。「select * from table where id='''+@id+'''' などの追加
」
2. 動的に構築された SQL ステートメントにテーブル パラメーターが含まれている場合は、次のようにテーブルに [] (角括弧) を追加しないでください。 'select * from ['+@tab+']'
4. データの検証: クライアント IE で Web ページの特殊効果を使用してユーザー入力データの正当性を検証することは、実際にはあまり効果的ではありません。開発者は、ユーザーがデータを厳密に検証できると想定すべきではありません。法的データを入力します。アプリケーション内のセミコロン、引用符、括弧、SQL キーワードなどを必ず確認してください。正規表現を使用すると、複雑なパターン マッチングを実行でき、正規表現を使用すると良好な結果が得られます。
××× Web サイトのアドレス帳表示プログラムは、personid を渡す必要があります。アドレス帳表示プログラムは、データの正当性の検証を行わずに personid を直接取得し、personid は文字列変数であるため、personid は url パラメータを通じて渡すことができます。 personid を取得するコードは次のとおりです:
if (getparameter(req,"personid")!=null){このプログラムで結合される動的 SQL ステートメントは次のとおりです:personid=getparameter(req,"personid").trim();
}その他{
personid="";
}
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 は上記のパラメーターが文字であることを意味します)
paratype=1 の場合
薄暗いパラバリュー
paravalue=リクエスト(パラメータ名)isnumeric(paravalue) でない場合は
記事のIDなどのint型パラメータの場合、まずそれが整数であるかどうかを判断できます。
response.write "パラメータ" & paraname & "数値型でなければなりません!" response.end
の場合は終了 それ以外は
paravalue=replace(paravalue,"'","''")
したら終了 セーフリクエスト=パラバリュー
関数終了
上記機能の応用
id =trim(request("id"))
if id<>"" then
数値(id)でない場合はResponse.write「数値パラメータを入力してください」http://www.bkjia.com/PHPjc/629725.html応答.終了
終了したら
id = clng(id)
それ以外
response.write「パラメータIDを入力してください」
応答.終了
終了したら
www.bkjia.com

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

ホットトピック









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

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

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

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

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

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

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

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