情報処理安全確保支援士 2022年 春期 午後1 問01
Webアプリケーションプログラム開発のセキュリティ対策に関する次の記述を読んで、設問1~3に答えよ。
H社は、Webアプリケーションプログラム(以下、Webアプリという)を開発する従業員200名の会社である。H社では、開発部がWebアプリを開発し、情報セキュリティ部が、表1に示す方法に従って、脆弱性検査を実施する。

開発部では、自部で開発したSシステムというWebシステムを利用して、コーディングルールなどの社内ルールを含む各種の情報を共有している。Sシステムの利用者は、ログイン後に情報の投稿と表示を行うことができる。投稿された情報はデータベースに格納される。
ログインから情報表示までのSシステムの画面遷移を表2に示す。

〔Sシステムの改修におけるアクセス制御要件の追加〕
開発部で新しいプロジェクトを立ち上げることになり、開発部の各プロジェクト内の情報共有を強化することにした。開発部は、次のようにSシステムを改修する方針とした。
・社内ルールだけでなく、各プロジェクトの計画書や各種の設計情報を各プロジェクト内で共有できるようにする。
・各プロジェクトの計画書や各種の設計情報については、情報が表示できる利用者を、情報の作成者と同じプロジェクトに参加する利用者に限定できるようにする。
なお、開発部員は、一時期には一つのプロジェクトだけに参加する。同時に複数のプロジェクトには参加しない。
開発部のDさんが、Sシステム改修の担当者に任命され、利用者のアクセス制御を次のように設計した。
・プロジェクトを識別するプロジェクトIDを連番で採番する。
・利用者IDそれぞれに対して、その利用者が参加するプロジェクトのプロジェクトIDを登録しておく。
・Sシステムに格納される各情報に、作成者の参加するプロジェクトを示すプロジェクトIDをあらかじめ付与しておく。
・プロジェクトIDを次に示す方法で取得し、そのプロジェクトIDを用いてアクセス制御する。
方法1:ログイン時にその利用者IDに対して登録されているプロジェクトIDを取得し、GETリクエストのクエリ文字列に、“id=プロジェクトID”の形式で指定する。情報選択機能は、クエリ文字列からプロジェクトIDを取得する。
〔情報選択機能の脆弱性〕
Sシステム改修後の脆弱性検査で、情報セキュリティ部は、プロジェクトの情報番号と情報名を、そのプロジェクトには参加していない利用者が、③そのプロジェクトに参加しているかのように偽ってリスト可能であるという脆弱性を指摘した。これは、情報選択機能においてクエリ文字列で受け取ったプロジェクトIDをチェックせずに利用していることに起因していた。この指摘を受けて、Dさんは、プロジェクトIDの取得方法として、次に示す別の方法を提示した。
方法2:情報選択機能の利用時に、セッション情報から利用者情報を取得する。情報選択機能は、当該利用者情報からプロジェクトIDを取得する。
情報セキュリティ部は、④方法1の脆弱性が方法2で解決されることを確認した。
Dさんは、プロジェクトIDの取得方法を方法2に修正した。
情報選択機能及び情報表示機能が参照するデータベースのE-R図を図1に、修正後の情報選択機能のソースコードを図2に示す。


〔情報表示機能の脆弱性〕
情報セキュリティ部は、情報表示機能にも情報選択機能と同様の脆弱性があることを指摘した。Dさんは、情報表示機能にも同様の修正を行った。修正後の情報表示機能のソースコードを図3に示す。

情報セキュリティ部による脆弱性検査に合格後、Sシステムの改修版がリリースされ、各プロジェクト内の情報共有が強化された。
設問1:表1について、(1)〜(3)に答えよ。
(1)表1中の下線①について、適切な文字列の例を、解答群の中から選び、記号で答えよ。
解答群
ア:%0D%0A
イ:%20
ウ:<br>
エ:<p>
模範解答
ア
解説
解答の論理構成
- 表1の説明には、
「“利用者の入力を基に HTTP レスポンスヘッダを生成する処理において、①改行コードを意味する文字列を入力したときに、HTTP ヘッダフィールドが追加されないことを確認する。」
とあります。 - HTTPヘッダは CR(Carriage Return, 0x0D)と LF(Line Feed, 0x0A)の並び “CRLF” で区切られます。これを挿入できると攻撃者は任意のヘッダやボディを追加できるため、脆弱性検査では “改行コードを意味する文字列” を入力してヘッダインジェクションの可否を確認します。
- 選択肢を確認します。
- ア:%0D%0A … URLエンコードされた “CR” と “LF”。
- イ:%20 … URLエンコードされた半角スペース。
- ウ:
、エ:… HTML上の改行・段落タグ。
- HTTPで問題となるのは “CRLF” であり、その URL エンコード表現が %0D%0A です。
- したがって、①に入る文字列は ア となります。
誤りやすいポイント
- HTMLタグ(
、)は表示用の改行・段落であり、HTTPヘッダの区切りには無関係です。 - 単なる %20(スペース)ではヘッダは区切れずインジェクションは発生しません。
- 「改行=LF だけ」と早合点し %0A を想起する受験者もいますが、HTTPヘッダの終端は必ず “CRLF” の連続である点に注意が必要です。
FAQ
Q: なぜ URL エンコード形で入力するのですか?
A: 実際の攻撃では直接 \r\n を送るとフィルタに弾かれるケースがあります。URLエンコードした %0D%0A ならブラウザやミドルウェアが復号して CRLF に変換するため、検査の再現性が高いからです。
A: 実際の攻撃では直接 \r\n を送るとフィルタに弾かれるケースがあります。URLエンコードした %0D%0A ならブラウザやミドルウェアが復号して CRLF に変換するため、検査の再現性が高いからです。
Q: LF(%0A)だけでは攻撃できませんか?
A: 多くの Web サーバ/プロキシは仕様どおり “CRLF” の組を改行と判定します。LF のみでは無視される可能性があるため、確実性を期して CRLF を用いるのがセキュリティ検査の基本です。
A: 多くの Web サーバ/プロキシは仕様どおり “CRLF” の組を改行と判定します。LF のみでは無視される可能性があるため、確実性を期して CRLF を用いるのがセキュリティ検査の基本です。
Q: HTTPヘッダインジェクションとレスポンス分割は同じですか?
A: ほぼ同義です。CRLF を挿入してヘッダを分割し、追加ヘッダや偽ボディを注入する攻撃全般を指します。
A: ほぼ同義です。CRLF を挿入してヘッダを分割し、追加ヘッダや偽ボディを注入する攻撃全般を指します。
関連キーワード: HTTPヘッダインジェクション、CRLF, URLエンコード、レスポンス分割
設問1:表1について、(1)〜(3)に答えよ。
(2)表1中の下線②について、名称を10字以内で答えよ。
模範解答
プレースホルダ
解説
解答の論理構成
- 【問題文】の引用
表1の「SQL インジェクション」対策には、 “SQL 文の組立てにおいて、SQL 文のひな形の中に②変数の場所を示す?記号を置く技法を利用する。”
と記載されています。 - “?記号を置く技法”は、SQL で値を埋め込む際に ? を使って変数の位置だけを示し、後から値をバインドする方法を意味します。
- JDBC では prepareStatement() を用い、? を **「プレースホルダ」**にして setInt や setString で値を設定します。
- したがって、下線②の名称は「プレースホルダ」となります。
誤りやすいポイント
- “バインド変数”と混同する
両者は密接に関連しますが、表1が問うのは 記号の名前であり、技法全体ではありません。 - “プリペアドステートメント”と書く
これは API 機能名であって “?記号”自体の呼び名ではないため不適切です。 - 英語で “placeholder” と記載する
日本語指定の問題ではカタカナ表記「プレースホルダ」が無難です。
FAQ
Q: “プレースホルダ”と“バインド変数”の違いは?
A: “プレースホルダ”は SQL 文内で値を入れる 位置を示す記号 ?、“バインド変数”は実際にその位置へ バインドされる値を指します。
A: “プレースホルダ”は SQL 文内で値を入れる 位置を示す記号 ?、“バインド変数”は実際にその位置へ バインドされる値を指します。
Q: “プリペアドステートメント”と答えると部分点はありますか?
A: 問題は “記号の名称”を尋ねているため、プリペアドステートメントでは得点できない可能性が高いです。
A: 問題は “記号の名称”を尋ねているため、プリペアドステートメントでは得点できない可能性が高いです。
Q: すべての RDBMS で ? がプレースホルダですか?
A: 主要な JDBC 準拠データベースでは ? を用いますが、一部の O/R マッパーや方言では異なる書式の場合があります。
A: 主要な JDBC 準拠データベースでは ? を用いますが、一部の O/R マッパーや方言では異なる書式の場合があります。
関連キーワード: プレースホルダ、バインド変数、プリペアドステートメント、SQLインジェクション、パラメータ化クエリ
設問1:表1について、(1)〜(3)に答えよ。
(3)表1中のaに入れる適切な字句を、5字以内で答えよ。
模範解答
a:改行コード
解説
解答の論理構成
- 表1「メールヘッダインジェクション」の対策欄には
“(3) 外部からの入力の全てについて、aを削除する。”
と記載されています。 - メールヘッダインジェクションは、ヘッダ区切りとして使われる CRLF(キャリッジリターン+ラインフィード)、すなわち改行文字列を混入させることで、攻撃者が任意のヘッダを追加・改ざんする脆弱性です。
- 同じ表1の「HTTP ヘッダインジェクション」対策検査項目でも “①改行コードを意味する文字列” が示されており、ヘッダ系インジェクションで問題となる文字列が改行コードであることが強調されています。
- 以上より、a に入る字句は「改行コード」であると結論付けられます。
誤りやすいポイント
- 「CR」「LF」「CRLF」など英字表記で解答してしまう。表1は日本語で“改行コード”と書いているため、英字のみでは減点対象になり得ます。
- メール本文のサニタイズと混同し、「HTMLタグ」や「スクリプト」と誤答するケース。メールヘッダインジェクションはヘッダ行の区切り文字が核心です。
- 「タブ」「スペース」と回答するミス。ヘッダ区切りはタブやスペースではなく、改行コードです。
FAQ
Q: “削除”ではなくエスケープ(無害化)ではダメなのですか?
A: メールヘッダでは CRLF が区切りとして認識されるため、エスケープ漏れがあると一発でインジェクションが成立します。安全側に倒すために、外部入力からは改行コードそのものを取り除くか、固定値/安全な API を利用するのが一般的です。
A: メールヘッダでは CRLF が区切りとして認識されるため、エスケープ漏れがあると一発でインジェクションが成立します。安全側に倒すために、外部入力からは改行コードそのものを取り除くか、固定値/安全な API を利用するのが一般的です。
Q: 改行コードを削除すると本文に改行が入れられなくなりませんか?
A: (3) の対象はヘッダに流用される入力値(宛先名・件名など)です。本文はヘッダ区切りの後ろに置かれるため、本文生成ロジックとは分離して扱います。本文中の改行は影響を受けません。
A: (3) の対象はヘッダに流用される入力値(宛先名・件名など)です。本文はヘッダ区切りの後ろに置かれるため、本文生成ロジックとは分離して扱います。本文中の改行は影響を受けません。
関連キーワード: 改行コード、CRLF, メールヘッダインジェクション、入力サニタイズ、ヘッダフィールド
設問2:〔情報選択機能の脆弱性〕について、(1)〜(4)に答えよ。
(1)本文中の下線③について、未参加のプロジェクトに参加しているかのように偽るための操作を、40字以内で具体的に述べよ。
模範解答
クエリ文字列のidに、未参加のプロジェクトのプロジェクトIDを指定する。
解説
解答の論理構成
- 【問題文】には「方法1:…GETリクエストのクエリ文字列に、“id=プロジェクトID”の形式で指定する。情報選択機能は、クエリ文字列からプロジェクトIDを取得する。」とあります。
- さらに「情報セキュリティ部は…③そのプロジェクトに参加しているかのように偽ってリスト可能…これは、情報選択機能においてクエリ文字列で受け取ったプロジェクトIDをチェックせずに利用していることに起因していた。」と指摘されています。
- つまり、利用者は自分のブラウザで送信する URL のクエリ文字列を書き換えるだけで、任意のプロジェクトIDをサーバ側に渡せます。チェックがないため、そのプロジェクトに属していなくても情報選択機能は受け入れてしまいます。
- したがって「未参加のプロジェクトのプロジェクトIDをクエリ文字列 id= に指定してアクセスする」という操作が、参加を偽る具体的手口となります。
誤りやすいポイント
- セッションIDが安全だからといって、クエリ文字列経由の値まで正しいと誤信する。
- 「id」というパラメータ名を固定値だと思い込み、ユーザが改変できないと考える。
- フロントエンドのプルダウン変更だけを想定し、直接 URL 入力やリクエスト改ざんを想像できない。
FAQ
Q: ブラウザからクエリ文字列を変更する方法は専門ツールが必要ですか?
A: いいえ。アドレスバーの URL を書き換えて再送信するだけでも実行できます。
A: いいえ。アドレスバーの URL を書き換えて再送信するだけでも実行できます。
Q: POST に変えても同じ脆弱性になりますか?
A: 入力値をサーバ側で検証しない限り、POST でも同様に改ざんできます。
A: 入力値をサーバ側で検証しない限り、POST でも同様に改ざんできます。
Q: HTTPS を使っていても防げませんか?
A: HTTPS は通信経路の盗聴・改ざんを防ぎますが、送信者自身が値を書き換える行為は防げません。
A: HTTPS は通信経路の盗聴・改ざんを防ぎますが、送信者自身が値を書き換える行為は防げません。
関連キーワード: クエリ文字列、アクセス制御、IDOR, GETパラメータ、セッション管理
設問2:〔情報選択機能の脆弱性〕について、(1)〜(4)に答えよ。
(2)本文中の下線④について、方法1の脆弱性が方法2で解決されるのはなぜか。30字以内で述べよ。
模範解答
・プロジェクトを示すパラメタを外部から指定できないから
・セッション情報からプロジェクトIDを取得するから
解説
解答の論理構成
- 方法1は【問題文】の引用「“id=プロジェクトID”の形式で指定する。情報選択機能は、クエリ文字列からプロジェクトIDを取得する。」とあるように、プロジェクトIDをURLのクエリ文字列としてブラウザから送る設計です。
- この設計では、同じく引用「③そのプロジェクトに参加しているかのように偽ってリスト可能」で示されたように、利用者が値を改ざんして別プロジェクトIDを送信でき、アクセス制御が破られます。
- 方法2は引用「情報選択機能の利用時に、セッション情報から利用者情報を取得する。情報選択機能は、当該利用者情報からプロジェクトIDを取得する。」と記述されており、プロジェクトIDをサーバ側セッションから取り出します。
- セッションIDは【問題文】注記のとおり「ログイン時に発行される推測困難な値であり、secure属性が付与されたcookieに格納」されているため、利用者はセッション内容を直接変更できません。
- したがってプロジェクトを示すパラメタが外部入力ではなくなり、パラメータ改ざんが不可能となるため、「④方法1の脆弱性が方法2で解決される」と結論付けられます。
誤りやすいポイント
- 「セッションもHTTPリクエストだから改ざんできる」と思いがちですが、セッション属性はサーバ側保管です。改ざん可能なのはクッキー値であり、そこにプロジェクトIDは入っていません。
- 「Referer や Hidden フィールドに変えても同じ」と誤解しやすいですが、どちらもクライアント送信値なので本質的な対策になりません。
- セッション固定攻撃と混同し、方法2でも危険と判断してしまうケースがありますが、本問はセッションID自体が推測困難で secure 属性付きと明示されています。
FAQ
Q: クライアント側の JavaScript で projectId を埋め込む方法では駄目なのですか?
A: JavaScript で埋め込んでも最終的に値はブラウザから送信されるため改ざんできます。サーバ側セッションから取得する方法2が安全です。
A: JavaScript で埋め込んでも最終的に値はブラウザから送信されるため改ざんできます。サーバ側セッションから取得する方法2が安全です。
Q: セッション情報に直接プロジェクトIDを保存しなくても良いですか?
A: 本問の方法2は「利用者情報からプロジェクトIDを取得」としており、セッションに利用者IDのみを保持し、データベース参照でプロジェクトIDを得ても同じ効果が得られます。
A: 本問の方法2は「利用者情報からプロジェクトIDを取得」としており、セッションに利用者IDのみを保持し、データベース参照でプロジェクトIDを得ても同じ効果が得られます。
Q: HTTPS だけでパラメータ改ざんは防げませんか?
A: HTTPS は盗聴・改ざんを防ぐのではなく通信経路での暗号化を行います。ブラウザ内部での改ざんを防ぐ機能はないため、サーバ側で信頼できる値を生成する必要があります。
A: HTTPS は盗聴・改ざんを防ぐのではなく通信経路での暗号化を行います。ブラウザ内部での改ざんを防ぐ機能はないため、サーバ側で信頼できる値を生成する必要があります。
関連キーワード: アクセス制御、パラメータ改ざん、セッション管理、クエリ文字列
設問2:〔情報選択機能の脆弱性〕について、(1)〜(4)に答えよ。
(3)図2中及び図3中のbに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:Connection
イ:DriverManager
ウ:PreparedStatement
エ:Statement
模範解答
b:ウ
解説
解答の論理構成
- 図2 及び図3 には共通して
「java.sql.b stmt = con.prepareStatement(sql);」
というコードが示されています。 - con.prepareStatement(sql) は JDBC において プリコンパイルされた SQL 文のオブジェクトを生成し、その戻り値の型は java.sql.PreparedStatement です。
- さらに、表1 の「②変数の場所を示す?記号」を使う対策は プリペアドステートメントによるパラメータバインディングを指しており、PreparedStatement を用いた実装であることと整合します。
- 以上より、b に入る適切な字句は PreparedStatement、解答群の記号では「ウ」と判断できます。
誤りやすいポイント
- Statement と PreparedStatement の混同
- Statement でも SQL は実行できますが、パラメータを安全に埋め込む機能はなく、「SQL インジェクション」対策になりません。
- クラス名と生成メソッドの組合せミス
- con.prepareStatement(...) を呼び出している場合、戻り値を Statement 型の変数に代入するとコンパイルエラーになります。
- ドライバ取得メソッド DriverManager.getConnection に引きずられ「イ」を選択してしまうケース。クラス名が似ていても用途が異なります。
FAQ
Q: PreparedStatement を使うと必ずインジェクション対策になりますか?
A: パラメータを setInt などで正しくバインドすれば、少なくとも SQL 文の構文レベルのインジェクションは防げます。ただしビジネスロジック上のチェック不足など別の脆弱性は残り得るので、入力検証やアクセス制御も併用する必要があります。
A: パラメータを setInt などで正しくバインドすれば、少なくとも SQL 文の構文レベルのインジェクションは防げます。ただしビジネスロジック上のチェック不足など別の脆弱性は残り得るので、入力検証やアクセス制御も併用する必要があります。
Q: Statement と比べたデメリットはありますか?
A: 生成時にプリコンパイル処理が入るためわずかなオーバーヘッドがありますが、再利用やキャッシュを行えば性能面の影響は小さく、多くの案件で推奨されます。
A: 生成時にプリコンパイル処理が入るためわずかなオーバーヘッドがありますが、再利用やキャッシュを行えば性能面の影響は小さく、多くの案件で推奨されます。
FAQ
Q: 「②変数の場所を示す?記号」とは具体的にどのように使いますか?
A: 例として SELECT * FROM 情報管理テーブル WHERE プロジェクトID = ? のように ? をプレースホルダとして記述し、stmt.setInt(1, projectId); で値をバインドします。
A: 例として SELECT * FROM 情報管理テーブル WHERE プロジェクトID = ? のように ? をプレースホルダとして記述し、stmt.setInt(1, projectId); で値をバインドします。
関連キーワード: PreparedStatement, パラメータバインディング、SQLインジェクション、JDBC, アクセス制御
設問2:〔情報選択機能の脆弱性〕について、(1)〜(4)に答えよ。
(4)図2中のcに入れる適切な字句を答えよ。
模範解答
c:stmt
解説
解答の論理構成
- 【問題文】図2の 7 行目では
String sql = "SELECT 情報番号、情報名 FROM 情報管理テーブル WHERE プロジェクトID = ?";
とあり、? のプレースホルダで 「SQL 文のひな形」 を構成しています。 - 続く 8 行目で
java.sql.b stmt = con.prepareStatement(sql);
と変数 stmt が生成されています。stmt は java.sql.PreparedStatement 型で、後続のバインドや実行を担当します。 - 9 行目の空欄 c は、この PreparedStatement 変数に対して setInt を呼び出し、先ほどのプレースホルダに値をバインドする箇所です。
したがってメソッドを呼ぶ対象は 8 行目で宣言した stmt である必要があります。 - よって、c に入る適切な字句は
stmt です。
誤りやすいポイント
- 8 行目で b に当たる型名と c に当たる変数名を混同し、両方に同じ語を入れてしまうケース。
- PreparedStatement を意味する ps や pstmt など、社内コーディング規約に基づく別名だと思い込む誤答。
- con.prepareStatement(sql) を一行で書き出す例に慣れておらず、変数 stmt の存在自体を見落とすミス。
FAQ
Q: stmt ではなく ps と書いてはいけませんか?
A: 図2の 8 行目で変数名として stmt が明記されているため、ここでは必ず一致させる必要があります。
A: 図2の 8 行目で変数名として stmt が明記されているため、ここでは必ず一致させる必要があります。
Q: java.sql.Statement と java.sql.PreparedStatement の違いは何ですか?
A: 前者は SQL 文をそのまま送る API、後者は 「SQL 文のひな形の中に②変数の場所を示す?記号を置く技法」 を使い、バインド変数で実行します。この問題では後者を利用することで SQL インジェクション対策を行っています。
A: 前者は SQL 文をそのまま送る API、後者は 「SQL 文のひな形の中に②変数の場所を示す?記号を置く技法」 を使い、バインド変数で実行します。この問題では後者を利用することで SQL インジェクション対策を行っています。
Q: プレースホルダは自動的にバインドされますか?
A: いいえ。図2の 9 行目のように stmt.setInt(1, projectId); など、型に応じた setXXX メソッドで明示的に値を割り当てる必要があります。
A: いいえ。図2の 9 行目のように stmt.setInt(1, projectId); など、型に応じた setXXX メソッドで明示的に値を割り当てる必要があります。
関連キーワード: プレースホルダ、PreparedStatement, バインド変数、SQLインジェクション
設問3:
図3中のdに入れる適切な字句を、図1中の属性名を含めて答えよ。
模範解答
d:情報番号 = ? AND プロジェクトID = ?
解説
解答の論理構成
-
図3―8行目
String sql = "SELECT 情報番号、情報名、情報内容 FROM 情報管理テーブル WHERE d";
ここで d には WHERE 句が入ります。 -
同ソース内の変数定義
- 3行目で int documentNo = Integer.parseInt(request.getParameter("no")); として **リクエストから「情報番号」**を取得。
- 7行目で int projectId = (省略); として **セッション情報から「プロジェクトID」**を取得。
-
要件
〔Sシステムの改修におけるアクセス制御要件の追加〕には
“情報が表示できる利用者を、情報の作成者と同じプロジェクトに参加する利用者に限定”
とあり、プロジェクト単位での絞り込みが必須です。 -
SQL の組み立て方
表1―項番2の対策にある “②変数の場所を示す?記号を置く技法” = プレースホルダを用いる指針に従うと、 d には2つのパラメータプレースホルダ ? を並べることになります。 -
以上より、documentNo に対応する **「情報番号」**と projectId に対応する **「プロジェクトID」**を AND で結合した条件が正解です。⇒ d = 情報番号 = ? AND プロジェクトID = ?
誤りやすいポイント
- 「情報番号 = ?」だけを書き、プロジェクト確認を忘れる。これでは改修目的のアクセス制御が成立しません。
- 条件を逆順に書いて “プロジェクトID = ? 情報番号 = ?” のように AND を省略する。SQL 構文エラーになります。
- プレースホルダを使わず直接数値連結を行い、SQL インジェクションを再度招く。
FAQ
Q: 情報番号 と プロジェクトID の順序を逆にしても動作しますか?
A: SQL の論理評価順に依存しないため機能上は動作しますが、図3の変数代入順(documentNo が先にバインドされる想定)に合わせて記述すると可読性が高まります。
A: SQL の論理評価順に依存しないため機能上は動作しますが、図3の変数代入順(documentNo が先にバインドされる想定)に合わせて記述すると可読性が高まります。
Q: そもそも SELECT * では駄目なのでしょうか?
A: 不要なカラムを取得すると転送量が増え、意図しないデータ露出リスクも高まります。要件に必要な「情報番号、情報名、情報内容」だけを明示的に列挙するのがベストプラクティスです。
A: 不要なカラムを取得すると転送量が増え、意図しないデータ露出リスクも高まります。要件に必要な「情報番号、情報名、情報内容」だけを明示的に列挙するのがベストプラクティスです。
Q: prepareStatement でなく Statement を使ってもよい?
A: 表1―項番2で示される “?記号を置く技法”は PreparedStatement によって初めて効果を発揮します。Statement では文字列結合になるため推奨されません。
A: 表1―項番2で示される “?記号を置く技法”は PreparedStatement によって初めて効果を発揮します。Statement では文字列結合になるため推奨されません。
関連キーワード: アクセス制御、SQLプレースホルダ、PreparedStatement, セッション管理


