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
-
型 varchar から型 numeric への変換エラー。
その他(データベース)
-
コマンドプロンプトの「%1」と「%~1」の違いがわからない
その他(プログラミング・Web制作)
-
-
4
GROUP BYでエラーが発生
SQL Server
-
5
ストアドのエラーについて
SQL Server
-
6
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
7
テーブル名を[]でくくらないとエラーになってしまう
SQL Server
-
8
「指定されたキャストは有効ではありません。」とエラーが出てしまいます。
Microsoft ASP
-
9
列名XXXXが無効です
SQL Server
-
10
副問合せの書き方について
SQL Server
-
11
”パラメータ値を TextBox から String に変換できません
SQL Server
-
12
コマンドプロンプトのエラーについて
その他(パソコン・周辺機器)
-
13
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
14
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
15
SQLでスキーマ名(所有者名)の修飾無しでテーブル参照したい
SQL Server
-
16
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
17
他のデータベースとのテーブル結合
SQL Server
-
18
【VB】コンボボックスにデータベースから取り出した値を入れたい
Visual Basic(VBA)
-
19
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
20
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
SQLのエラー(~付近に不適切な...
-
エクセルマクロで指定範囲内の...
-
エクセルのグループボックス枠...
-
sqlで文字列を最後に追加したい
-
GROUP BYでエラーが発生
-
SQLServerが存在しないか、アク...
-
SQLserverのIF文について
-
ノートンインターネットセキュ...
-
オブジェクト名 '<table>' が無...
-
レポートが開けない。
-
Accessのレポートが新規作成で...
-
oo4oのMovePreviousnメソッドに...
-
PostgreSqlでFunctionの作成に...
-
ファイアホースモードエラーに...
-
リストボックスで選択したレコ...
-
ACCESSで作成したアプリケーシ...
-
バッチファイルからのBCP起動に...
-
SQLServer2005(SQLEXPRESS)
-
SQL Severのクエリ異常
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Oracle 8i コンマ(,)を含むデ...
-
SQLのエラー(~付近に不適切な...
-
PostgreSqlでFunctionの作成に...
-
GROUP BYでエラーが発生
-
エクセルマクロで指定範囲内の...
-
ACCESS ADOでupdateが効かない
-
ACCESSで作成したアプリケーシ...
-
sqlで文字列を最後に追加したい
-
エクセルからSQLサーバー ...
-
オブジェクト名 '<table>' が無...
-
SQLserverのIF文について
-
バッチファイルからのBCP起動に...
-
SQLServerが存在しないか、アク...
-
エクセルのグループボックス枠...
-
@@ERRORと@@ROWCOUNT併用について
-
ストアドの戻り値(配列)について
-
レポートが開けない。
-
Accessのレポートが新規作成で...
-
Access2000環境に対応するMid関...
-
自作関数を含んだクエリをエク...
おすすめ情報