パラメータBinding:その下にフード?
質問
.NET、Java等の高レベルのデータベースのAPIではさまざまな言語をできることが多い技術として成功した場合は、パラメータの結合に対して送るテキストコマンドのデータベースサーバーです。何を思うときに実行声明のようになります:
SqlCommand cmd = new SqlCommand("GetMemberByID");
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@ID", memberID);
para.DbType = DbType.Integer;
cmd.Parameters.Add(param);
ごきげんよう、トメ子です、ベストプラクティスSQLインジェクション攻撃を抑えます。るかもしれば下にフードのときに実行され算はどこでわかりますか?は、結果はまだまだ安全なSQLの文字列?反対の場合、どのような終わりでありませんか?あなSQLインジェクション攻撃?
解決
MySQLのマニュアルページ に成功した場合は提供す多くの情報を適用すべきであるその他のRDBMS).
基本的にお書を構文解析処理を行う前に、パラメータの送別ではなく、取り扱いのSQLコードです。こSQL注入攻撃は、SQL構文解析前のパラメーターもセットです。
他のヒント
に順:合意書を送信し、データ利用プランをご利用される場合はするものではありませんなして再計画は毎回このクエリが送られだけの価値をパラメータが変更されています。ここではどのようprocsの付加給付とprocsことができる為の許可をprocsて勧誘を行うものではありません基本となるテーブルで
使用している場合は、MS SQL、負荷のプロファイラとんどのSQL文を生成しご利用の際はparameterisedます。以下に例を示します(私が使っている企業Libary3.1が、同じ結果を用いSqlParameters直接の対SQL Server2005年
string sql = "SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did";
Database db = DatabaseFactory.CreateDatabase();
using(DbCommand cmd = db.GetSqlStringCommand(sql))
{
db.AddInParameter(cmd, "DomName", DbType.String, "xxxxx.net");
db.AddInParameter(cmd, "Did", DbType.Int32, 500204);
DataSet ds = db.ExecuteDataSet(cmd);
}
を含むに関連して発生する:
exec sp[underscore]executesql N'SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did',
N'@DomName nvarchar(9),
@Did int',
@DomName=N'xxxxx.net',
@Did=500204
も見ることができれば、引用文字にしたパラメータとして渡され、彼らは自動的にエスケープされて:
db.AddInParameter(cmd, "DomName", DbType.String, "'xxxxx.net");
exec sp[underscore]executesql N'SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did',
N'@DomName nvarchar(10),
@Did int',
@DomName=N'''xxxxx.net',
@Did=500204
所属していません StackOverflow