这是 SQL 查询,注入安全吗
Is this SQL query, injection safe
我认为初始代码没问题:
SqlCommand param = new SqlCommand();
SqlGeometry point = SqlGeometry.Point(center_lat,center_lng,0);
SqlGeometry poly = SqlGeometry.STPolyFromText(new SqlChars(new SqlString(polygon)),0);
param.CommandText = "INSERT INTO Circle (Center_Point, Circle_Data) VALUES (@point,@poly);";
param.Parameters.Add(new SqlParameter("@point", SqlDbType.Udt));
param.Parameters.Add(new SqlParameter("@poly", SqlDbType.Udt));
param.Parameters["@point"].UdtTypeName = "geometry";
param.Parameters["@poly"].UdtTypeName = "geometry";
param.Parameters["@point"].Value = point;
param.Parameters["@poly"].Value = poly;
但是我意识到创建 polygon
字符串时可能会出现问题。
在 javascript - 我是这样创建的:
var Circle_Data = "POLYGON ((";
for (var x = 0; x < pointsToSql.length; x++) { // formatting = 0 0, 150 0, 150 50 etc
if (x == 360) { Circle_Data += pointsToSql[x].lat.toString() + " " + pointsToSql[x].lng.toString() + "))"; }
else { Circle_Data += pointsToSql[x].lat.toString() + " " + pointsToSql[x].lng.toString() + ","; }
}
然后传递给 C#。那么这样安全吗?即使在查询中发生了参数化?
使用参数你将从SQL注入中保存,如果在POLYGON
字符串中注入一些SQL,它会在SQL服务器端出错.
例如,如果您有:
POLYGON(12.33 12.55,13.55; DROP TABLE students;)
SQL 服务器将尝试根据传递的字符串构造几何类型,但会失败。
我认为初始代码没问题:
SqlCommand param = new SqlCommand();
SqlGeometry point = SqlGeometry.Point(center_lat,center_lng,0);
SqlGeometry poly = SqlGeometry.STPolyFromText(new SqlChars(new SqlString(polygon)),0);
param.CommandText = "INSERT INTO Circle (Center_Point, Circle_Data) VALUES (@point,@poly);";
param.Parameters.Add(new SqlParameter("@point", SqlDbType.Udt));
param.Parameters.Add(new SqlParameter("@poly", SqlDbType.Udt));
param.Parameters["@point"].UdtTypeName = "geometry";
param.Parameters["@poly"].UdtTypeName = "geometry";
param.Parameters["@point"].Value = point;
param.Parameters["@poly"].Value = poly;
但是我意识到创建 polygon
字符串时可能会出现问题。
在 javascript - 我是这样创建的:
var Circle_Data = "POLYGON ((";
for (var x = 0; x < pointsToSql.length; x++) { // formatting = 0 0, 150 0, 150 50 etc
if (x == 360) { Circle_Data += pointsToSql[x].lat.toString() + " " + pointsToSql[x].lng.toString() + "))"; }
else { Circle_Data += pointsToSql[x].lat.toString() + " " + pointsToSql[x].lng.toString() + ","; }
}
然后传递给 C#。那么这样安全吗?即使在查询中发生了参数化?
使用参数你将从SQL注入中保存,如果在POLYGON
字符串中注入一些SQL,它会在SQL服务器端出错.
例如,如果您有:
POLYGON(12.33 12.55,13.55; DROP TABLE students;)
SQL 服务器将尝试根据传递的字符串构造几何类型,但会失败。