環境: .net 3.5、c#、sharepoint 2010
既存の機能: 検索テキスト ボックスと検索ボタンを備えたユーザー コントロールがあります。送信ボタンが押されると、検索結果とともに、検索キーワードを含むクエリ文字列が作成されます。ポストバック時に、テキスト ボックスにはクエリ文字列からの検索キーワードが再び入力されます。これはうまくいきます。
問題: クロスサイド スクリプティングを修正する必要があります。html.encode と ' で一重引用符をエスケープするフィルターも同様です。テキストボックスの値。しかし、テキストボックスには「'searchingstring'」のように値が表示されます。
ユーザーに「Searchstring」のみを表示する必要がありますが、ソースコードの値は 'searchingstring' である必要があります。クロス サイド スクリプトの脆弱性を防止します。
(注: 上記のテキスト「&」は実際には「&」です。' ではありません。stackoverflow エディターはそれを単一引用符に変換するため、読み取り用に & に置き換えました)
stringbuilder を使用して pageinit でテキストボックスを動的に構築しようとすると、上記のように必要なものが得られます。例えば:
StringBuilder sb = new StringBuilder();
if (Request.QueryString["str"] != null)
{
string strName = Request.QueryString["str"].ToString();
str_value = htmlCheckReturnData(strName ); //encoded string
sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '" + str_value + "' />");
// Response.Write(sb.ToString());
}
else
{
sb.Append("<INPUT type='TEXT' runat = 'server' id = 'mystring' value = '' />");
}
ltlSearch.Text = sb.ToString();
しかし、ページロード内の「mystring」テキストボックスの値を次のように確認する必要があります。
if (!IsPostBack && !Page.IsAsync)
{
if (!string.IsNullOrEmpty(mystring.Value)) //NOT WORKING HOW TO GET the textbox value
{
//do something
}
}
注: stringbuilder 書き込みメソッドを使用せずに page_init でテキスト ボックス コントロールを作成すると、エンコーディング付きの文字がテキスト ボックスに表示されます。
何か助けはありますか?
ありがとうございます