iT邦幫忙

0

ASP.net(C#) 被掃出 Stored XSS 詢問這段程式該如何修改

DataList d1Function=null;
......
DataTable dtTemp=null;
try{
    switch(.....)
    {
     .....
     dtTemp=.....(這邊是呼叫預存程序去拿資料)
     .....
     d1Function.DataSource=dtTemp.DefaultView; //這段被掃出來想詢問一下這邊可以怎麼改,原本想說用Encoder.HtmlEncode() 但他是DataList所以不知道能怎麼改。
     d1Function.DataBind();
    }
}.....
<asp:DataList id="dlFunction" runat="server" RepeatColumns="2" Width="100%">
<ItemStyle BackColor="#F1F4FE" Width="50%"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="chkFunction" runat="server" style='<%# DataBinder.Eval(Container, "DataItem.FontColor","COLOR:{0};") %>' Text ='<%# DataBinder.Eval(Container, "DataItem.FunctionName") %>' Checked="false">
</asp:CheckBox>
</ItemTemplate>
</asp:DataList>

Text ='<%# DataBinder.Eval(Container, "DataItem.FunctionName") %>'
改成
Text ='<%# Microsoft.Security.Application.Encoder.HtmlEncode(DataBinder.Eval(Container, "DataItem.FunctionName").ToString()) %>'

改成這樣也是可以防止XSS沒錯吧 如果再拿去掃弱點的話他會知道我前端有用Encoder嗎

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

2
Samuel
iT邦好手 1 級 ‧ 2021-10-20 16:55:55
最佳解答

您好
這樣改可以喔

共有四種寫法可以透過
1.Server.HTMLEncode() ->傳入參數要記得是字串因此要.ToString()
實際上背後仍然是呼叫了HttpUtility.HtmlEncode

2.System.Web.HttpUtility.HtmlEncode() ->若未來要轉升到.net 5(.net core)也通用有支援

3.也可以簡寫成 <%#: %>用一個半型的冒號(:)來做html encode
=>.NET Framework 4之後才支援,由於
舊專案可能是從2.0、3.0版本轉來所以這種新型寫法較不常見

4.AntiXssEncoder.HtmlEncode()
->需額外加入參考using Microsoft.Security.Application

通常前端aspx只要你有透過Data-Bind做的
要記得補上面這些處理
有些弱掃描工具可能只認AntiXss...或者Server.HtmlEncode要測試看看

了解了 謝謝

我要發表回答

立即登入回答