2017-04-24 25 views
0

以下は、格納されたXSS.itに脆弱性があるという脆弱性が、データレイヤーがデータベースからデータを取得すると述べているcheckmarxレポートのコードです。この要素の値は、 が適切にフィルタリングまたはエンコードされずにコードを通過し、最終的にaspxページでユーザーに表示されます。asp.netでのクロスサイトスクリプティング攻撃を防止するC#

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCancelingEdit="GridView1_RowCancelingEdit" 
OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating" OnRowDeleting="GridView1_OnRowDeleting" OnPageIndexChanging="GridView1_PageIndexChanging" Width ="1000px" class="grid"> 
<Columns> 
    <asp:TemplateField HeaderText="User Name"> 
     <ItemTemplate> 
      <asp:Label ID="lbl_Name" runat="server" Text='<%#Eval("Uname") %>'></asp:Label> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="txt_Name" runat="server" Text='<%#Eval("Uname") %>'></asp:TextBox> //this is the line vulnerable to XSS 
     </EditItemTemplate> 
    </asp:TemplateField>  
</Columns> 

DataTable dt = new DataTable(); 
    try 
    { 
     SqlConnection con = new SqlConnection(conn); 
     con.Open(); 
     SqlDataAdapter adapt = new SqlDataAdapter("Select Uid,Uname,Utype,Uemail,ClientName,ProjectName,Ulog from usrtable where [email protected] and [email protected], con); 
    adapt.SelectCommand.Parameters.AddWithValue("@clientname", clientname); 
adapt.SelectCommand.Parameters.AddWithValue("@Normal", "Normal");   
    adapt.Fill(dt); 
     con.Close(); 
    } 



if (dt.Rows.Count > 0) 
{ 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 
} 

背後にあるコードは、Iアイテムテンプレートに渡す午前すべての列の値を符号化すべきか、それがコード脆弱性の任意の他のラインです。そのhtmlエンコーディングの場合、どうすれば実現できますか?この問題で親切に私を導く。

+4

あなたのSQLクエリを文字列に連結しないでください! –

+0

@ DanielA.Whiteこれを忘れましたhttps://xkcd.com/327/ ;-) – Orangesandlemons

+0

テキストボックスに「Liam OR 1 = 1」と入力してください:O – Liam

答えて

-2

XSSを防ぐには、テキストボックスに関連付けられたサーバーサイドのCustomValidator(JavaScriptのバイパスの迂回を防ぐため)を追加し、ドメインロジックを設定します。

編集(OP編集):あなたはまた、SQLエラー(ユーザー単一引用符を導入し、SQLを壊す)を避けるために、パラメータ化クエリを使用してSQLインジェクションしたいと思います。

編集:バリデータは、悪意のある/許可されていないhtml/js/cssコードをチェックする必要があります。 XSSのエキスパートではありませんが、良いガイドラインのためにOWASを見ることができます。 https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet

+0

詳細が必要です。 – Liam

+1

カスタムバリデータは何をすべきですか? – user3660473

+0

@Liamは、CustomValidatorがIMHO(XSS thoにはあまりない)をチェックし、素晴らしい参照のためにOWASPにリンクする必要があるかどうかを解説しようと編集しました。 – bradbury9

0

.NET Framework 4.0以降でTemplateFieldを使用する場合、XSSを防ぐために、aspxページでMicrosoft Web Protection Libraryを使用します。 .NET Framework 4.5は既にフレームワークに統合されており、ライブラリはもう必要ありません。

フレームワーク4.0以上。

<ItemTemplate> 
<asp:Label ID="Name" runat="server" 
    Text='<%#Microsoft.Security.Application.Encoder.HtmlEncode(Eval("Name").ToString()) %>'> 
</asp:Label> 

フレームワーク4.5

<ItemTemplate> 
<asp:Label ID="Name" runat="server" 
    Text='<%#System.Web.Security.AntiXss.AntiXssEncoder.HtmlEncode(Eval("Name").ToString(),true) %>'> 
</asp:Label> 

彼らはレンダリングされたとき、これはあなたのラベルをエンコードします。 ItemTemplateにのみ使用し、EditItemTemplateレンダリングにはhtml入力テキストがあり、デフォルトでフレームワークによってエンコードされます。

+0

ライブラリーは、そのホームページでは、ライブラリーの終わりにあり、フレームワーク自体に含まれていることを明示しています。 – Alejandro

+0

あなたは本当に正しいです、それを指摘していただきありがとうございます。私は私の答えを編集しました。 –

関連する問題