1. ホーム
  2. c#

[解決済み] C#で簡単なSQLクエリをエスケープする方法(SqlServer用

2023-05-18 17:58:52

質問

SQL文字列を期待するAPIを使用しています。私はユーザー入力を受け取り、それをエスケープしてAPIに渡します。 ユーザー入力は非常に単純です。カラムの値を要求しています。このように。

string name = userInput.Value;

そして、SQLクエリを構築します。

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           name.replace("'", "''"));

これは十分に安全でしょうか?もしそうでなければ、カラムの値を安全にする簡単なライブラリ関数はないでしょうか。

string sql = string.Format("SELECT * FROM SOME_TABLE WHERE Name = '{0}'",
                           SqlSafeColumnValue(name));

このAPIでは、データベースとしてSQLServerを使用します。

どのように解決するのですか?

SqlParameterを使うことはできないので、文字列リテラルの'を''(ダブルクォート1つではなく、シングルクォート2つ)に置き換えるだけです。それだけです。

ダウンボッターの皆さんへ:質問の最初の行をもう一度読んでください。

編集: はい、SQL インジェクション攻撃については知っています。この引用がそれに対して脆弱であるとお考えなら、動作する反例を提示してください。私はそうではないと思います。