
C#でSELECT文を使った簡単な構文を組み立てているのですがエラーになります。
変数を使わず、構文をべた書きするとエラーにはならないため、変数の箇所の組み方だと思うのですが、どこが良くないのか気付けず困っています。
よろしくお願いいたします。
ーーSQL構文ーー
string input1;
string sql;
string source = @"DB接続の情報";
SqlConnection conn = new SqlConnection(source);
conn.Open();
sql = "select カラム名 from TBL名 where カラム名='" + input1 + "'";
SqlCommand cmd = new SqlCommand(sql,conn);
SqlDataReader reader = cmd.ExecuteReader();
:
ーーーーーーーー
画面にはテキストボックスと実行ボタンを配置しています。
input1はテキストボックスに入力した値を取得します。
例えば、TEST11とテキストボックスに入力し、実行ボタンを押下すると、
[SqlException(0x80131904): ’TEST11’ 付近に不適切な構文があります]
というエラーになります。
テキストボックスから値をとらず、直前で
input1 = "TEST11";
として実行した場合や、下記のようにsqlにべた書きした場合はエラーが起こりません。
sql = "select カラム名 from TBL名 where カラム名='TEST11'";
変数で構文を組み立てたときにエラーが起こるため、テキストボックスから取得した
値に何か見えないコードのようなものがついてきているのでしょうか。
すみませんがよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
ご提示のソースには SQL インジェクションの脆弱性があります
https://www.ipa.go.jp/security/vuln/websecurity- …
根本的解決のために、「SQL文の組み立ては全てプレースホルダで実装する」修正を加えましょう。
参考) C# のプレースホルダ実装方法
https://docs.microsoft.com/ja-jp/dotnet/api/syst …
この修正を行えば、構文エラーも解消すると思います。
回答ありがとうございます。
ご紹介いただいた「プレースホルダ実装方法」を参照し、組み立て部分に実装したらエラーが解消されました。
脆弱性の解決もしていただきありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
テーブル名を[]でくくらないとエラーになってしまう
SQL Server
-
'modify' 付近に不適切な構文があります。
SQL Server
-
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
-
4
SQLServer2005のSQL文での別名の取り扱い
SQL Server
-
5
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
8
SUBSTRING 関数に渡した長さのパラメータが無効です。
SQL Server
-
9
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
10
GROUP BYでエラーが発生
SQL Server
-
11
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
12
列名XXXXが無効です
SQL Server
-
13
ストアドのエラーについて
SQL Server
-
14
列名に変数を使うことはできないのでしょうか?
SQL Server
-
15
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
16
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
17
SQLServerで文字列の末尾からある位置で取出
SQL Server
-
18
GROUP BYを行った後に結合したい。
Oracle
-
19
オブジェクト参照がオブジェクト インスタンスに設定されていません というエラーについて
Microsoft ASP
-
20
『列名 '担当者CD' があいまいです。』
Microsoft ASP
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
ACCESS ADOでupdateが効かない
-
バッチファイルからのBCP起動に...
-
GROUP BYでエラーが発生
-
Accessのレポートが新規作成で...
-
sqlで文字列を最後に追加したい
-
BCPコマンドのリダイレクト値が...
-
エクセルマクロで指定範囲内の...
-
ExcelからADOでCSVに接続してい...
-
VBAでXMLインポートエラーを無...
-
バッチプログラムでSQLSever200...
-
クエリの存在チェック
-
PostgreSqlでFunctionの作成に...
-
エクセルのグループボックス枠...
-
Access2000環境に対応するMid関...
-
ACCESS2000ディスクまたはネッ...
-
レポートが開けない。
-
Excel-VBAの「しばらくお待ちく...
-
異なるサーバーにファイルをエ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
Access2000環境に対応するMid関...
-
sqlで文字列を最後に追加したい
-
何も表示されない実行時エラー...
-
バッチファイルからのBCP起動に...
-
ACCESS ADOでupdateが効かない
-
ACCESS2000ディスクまたはネッ...
-
オブジェクト名 '<table>' が無...
-
エクセルのグループボックス枠...
-
エクセルマクロで指定範囲内の...
-
VB6より長文INSERT文でORA1756...
-
SQLServerが存在しないか、アク...
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
SQLServer・ストアドプロシージ...
-
クエリの存在チェック
-
分散トランザクションを開始で...
おすすめ情報