
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で質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- PHP DBのハッシュ化したパスワードをpassword_verifyで戻し照合したのですが上手く行きません 2 2023/02/06 13:24
- MySQL SQLについて教えて下さい。 SELECT分で、あるカラムにある日付の 半年先のデータを取って来たい 3 2022/12/07 22:28
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
このQ&Aを見た人はこんなQ&Aも見ています
-
'modify' 付近に不適切な構文があります。
SQL Server
-
テーブル名を[]でくくらないとエラーになってしまう
SQL Server
-
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
-
4
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
5
実行時エラー 3265「要求された名前、または序数
Visual Basic(VBA)
-
6
GROUP BYでエラーが発生
SQL Server
-
7
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
8
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
9
SQLServer2005のSQL文での別名の取り扱い
SQL Server
-
10
SUBSTRING 関数に渡した長さのパラメータが無効です。
SQL Server
-
11
列名XXXXが無効です
SQL Server
-
12
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
13
ストアドのエラーについて
SQL Server
-
14
VB6+SQL サーバー 2000 で 実行時エラー '3704' がでます:
Visual Basic(VBA)
-
15
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
16
SQLServerで文字列の末尾からある位置で取出
SQL Server
-
17
ADO VBA 実行時エラー3021
Visual Basic(VBA)
-
18
オラクルではできるのにSQLSERVERではサブクエリーで複数キーを指定できない?
SQL Server
-
19
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
20
列名に変数を使うことはできないのでしょうか?
SQL Server
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
PostgreSqlでFunctionの作成に...
-
Oracle 8i コンマ(,)を含むデ...
-
ExcelからADOでCSVに接続してい...
-
ACCESS ADOでupdateが効かない
-
何も表示されない実行時エラー...
-
sqlで文字列を最後に追加したい
-
SQLが実行されません…
-
列を挿入したい
-
「代表」という文字が入りません
-
BCPコマンドのリダイレクト値が...
-
レポートが開けない。
-
SQLServer・ストアドプロシージ...
-
VB6より長文INSERT文でORA1756...
-
エクセルからSQLサーバー ...
-
オブジェクト名 '<table>' が無...
-
エクセルマクロで指定範囲内の...
-
nvarchar型で指定して文字列幅...
-
@@ERRORと@@ROWCOUNT併用について
-
エクセルのグループボックス枠...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLのエラー(~付近に不適切な...
-
Oracle 8i コンマ(,)を含むデ...
-
エクセルマクロで指定範囲内の...
-
バッチファイルからのBCP起動に...
-
PostgreSqlでFunctionの作成に...
-
ACCESS ADOでupdateが効かない
-
sqlで文字列を最後に追加したい
-
Access2000環境に対応するMid関...
-
ACCESS2000ディスクまたはネッ...
-
クエリの存在チェック
-
何も表示されない実行時エラー...
-
GROUP BYでエラーが発生
-
エクセルからSQLサーバー ...
-
ACCESSで作成したアプリケーシ...
-
SQLServer・ストアドプロシージ...
-
エクセルのグループボックス枠...
-
SQLServerのエラー1069について
-
SQLserverのIF文について
-
オブジェクト名 '<table>' が無...
-
oo4oのMovePreviousnメソッドに...
おすすめ情報