アプリ版:「スタンプのみでお礼する」機能のリリースについて

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'";

変数で構文を組み立てたときにエラーが起こるため、テキストボックスから取得した
値に何か見えないコードのようなものがついてきているのでしょうか。

すみませんがよろしくお願いいたします。

A 回答 (2件)

ご提示のソースには SQL インジェクションの脆弱性があります


https://www.ipa.go.jp/security/vuln/websecurity- …

根本的解決のために、「SQL文の組み立ては全てプレースホルダで実装する」修正を加えましょう。

参考) C# のプレースホルダ実装方法
https://docs.microsoft.com/ja-jp/dotnet/api/syst …

この修正を行えば、構文エラーも解消すると思います。
    • good
    • 1
この回答へのお礼

解決しました

回答ありがとうございます。
ご紹介いただいた「プレースホルダ実装方法」を参照し、組み立て部分に実装したらエラーが解消されました。
脆弱性の解決もしていただきありがとうございました。

お礼日時:2021/10/15 10:30

テキストボックスの値をログに出してみたら?

    • good
    • 0
この回答へのお礼

回答ありがとうございます。
テキストボックスの値をログで確認してみます。

お礼日時:2021/10/15 10:25

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A