0

次の 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));

何かアイデアをください??

前もって感謝します

4

5 に答える 5

6

これを行うことをお勧めする方法は次のとおりです。

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 インジェクションが発生する可能性があるため、これも慎重に記述する必要があります最後に、使い捨て資源も適切に処分してください。

于 2013-07-29T15:27:04.383 に答える
3

GUID を取得するには、または(ドキュメントを参照して違いを理解してください) を使用する必要があります。また、セキュリティ上Requestの理由から、文字列の連結/書式設定ではなく、すべての SQL コマンドとクエリでパラメーターを使用する必要があります。で許可されている簡略化された構文を使用しています。パラメータ名 (など) は、ストアド プロシージャで宣言されている実際のパラメータ名と一致する必要があります。ParamsQueryStringCommandType.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();
}
于 2013-07-29T15:20:54.407 に答える
0

これはそれを行う必要があります:

Guid myGuid = new Guid(Request.Params["GUID"])

実際の G​​uid としてキャストすると、SQL インジェクション攻撃も防ぐことができます

于 2013-07-29T15:06:05.417 に答える
0
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 );
于 2013-07-29T15:06:27.153 に答える
-1
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);
于 2013-07-29T15:06:24.400 に答える