如何在c#中将url的一部分作为变量传递
本文关键字:变量 一部分 中将 url | 更新日期: 2023-09-27 18:25:18
我有以下URL:http://localhost:52416/Controls/Support_Survey.aspx?GUID=4aa4caca-f5cb-11e2-b582-635fb56c00b9
我需要从URL中获取GUID作为变量,并将其传递到以下存储过程中:
database.InsertUpdate(String.Format("CALL spSurveyAnswer_Insert('{0}', '{1}','{2}');", selectValue1, txtFeedBack.Text, PassGUID_HERE));
你知道吗??
提前感谢
以下是我建议您的操作方法:
var requestGuid = Request.Params["GUID"];
if (string.IsNullOrEmpty(requestGuid))
{
throw new InvalidOperationException("The request GUID is missing from the URL");
}
Guid guid;
if (!Guid.TryParse(requestGuid, out guid))
{
throw new InvalidOperationException("The request GUID in the URL is not correctly formatted");
}
using(var connection = new SqlConnection("connection_string"))
{
using(var command = new SqlCommand("spSurveyAnswer_Insert", connection))
{
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("firstParamName", selectValue1);
command.Parameters.AddWithValue("feedbackParamName", txtFeedBack.Text);
command.Parameters.AddWithValue("guidParamName", guid);
command.Connection.Open();
command.ExecuteNonQuery();
}
}
您不能保证GUID将在URL中或是有效的GUID,因此要采取防御措施并检查两者!然后使用参数化查询来帮助防止SQL注入-由于您正在调用存储过程,如果您在proc中滥用参数值,则仍然可以进行SQL注入,因此您也需要仔细编写。最后,还要妥善处理可支配资源。
您应该使用Request
的Params
或QueryString
(请参阅它们的文档以了解差异)来获取GUID,出于安全原因,您应该在所有SQL命令和查询中使用参数,而不是字符串串联/格式化。我使用的是CommandType.StoredProcedure
允许的简化语法。参数名称("firstParamName"
等)应该与存储过程中声明的实际参数名称相匹配。
Guid myGuid = new Guid(Request.Params["GUID"]);
using (SqlConnection conn = // get connection)
using (SqlCommand command = new SqlCommand("spSurveyAnswer_Insert", conn))
{
conn.Open();
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("firstParamName", selectValue1);
command.Parameters.AddWithValue("feedbackParamName", txtFeedBack.Text);
command.Parameters.AddWithValue("guidParamName", myGuid);
command.ExecuteNonQuery();
}
string url = "http://localhost:52416/Controls/Support_Survey.aspx?GUID=4aa4caca-f5cb-11e2-b582-635fb56c00b9";
string lastPart = url.Split('?').Last().Replace("GUID=",string.Empty);
您的代码正在探测SQL注入,因此请使用SqlCommand.Parameters属性
SqlCommand command = // your sql command;
database.InsertUpdate(String.Format("CALL spSurveyAnswer_Insert('{0}', '{1}','{2}');", @selectValue1, @txtFeedBack, @PassGUID_HERE));
command.Parameters.AddWithValue("@selectValue1", selectValue1);
command.Parameters.AddWithValue("@txtFeedBack", txtFeedBack.Text);
command.Parameters.AddWithValue("@PassGUID_HERE", lastPart );
这应该做到:
Guid myGuid = new Guid(Request.Params["GUID"])
将其转换为实际的Guid将防止SQL注入攻击。
Uri url = new Uri("http://localhost:52416/Controls/Support_Survey.aspx?GUID=4aa4caca-f5cb-11e2-b582-635fb56c00b9");
string query = url.Query //query is now "GUID=4aa4caca-f5cb-11e2-b582-635fb56c00b9"
string guidStr = query.Replace("GUID=", "");
Guid guid = new Guid(guidStr);