Telerik RadGrid 控件如何防止XSS Attack

本文介绍如何在RadGrid控件中进行服务器端及客户端的数据绑定,并通过HtmlEncode和JavaScript escape函数确保显示数据的安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:对于服务器端的数据绑定设置,可以:

1)如果是:RadGrid control(RadGrid for asp.net ajax) 版本,则使用HtmlEncode 属性。

<MasterTableView> 
    <Columns> 
        <telerik:GridBoundColumn UniqueName="Description" DataField="Description" HtmlEncode="true" /> 
    </Columns> 
</MasterTableView> 

 

2)如果(RadGrid for asp.net),只能在ItemDataBound事件中,手动实现了:

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) 
    { 
       if (e.Item is GridDataItem) 
        { 
            GridDataItem dataItem = (GridDataItem)e.Item;             

            if (!e.Item.IsInEditMode)

            {

              dataItem["BoundColumnUniqueName"].Text = Server.HtmlEncode(dataItem["BoundColumnUniqueName"].Text); 

             }

           

        } 
    } 

 

二:对于客户器端的数据绑定设置,使用JavaScript的escape Function() 来实现http://www.telerik.com/community/forums/aspnet-ajax/grid/htmlencode-true-not-honoured-on-a-gridboundcolumn-when-using-clientside-data-binding.aspx

<ClientSettings> 
    <DataBinding Location="WebService.asmx" SelectMethod="GetData" /> 
</ClientSettings> 

 

in aspx.cs file

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }  

    [WebMethod]
    public static List<Customer> GetData()
    {
        DataClassesDataContext context = new DataClassesDataContext();
        return context.Customers.Take(10).ToList();
    }
}

 

in aspx file

 

<head runat="server">
    <title></title>
    <telerik:RadScriptBlock runat="server" ID="RadScriptBlock1">
        <script type="text/javascript">
            function pageLoad()
            {
                PageMethods.GetData(loadGrid);
            }

            function loadGrid(result)
            {
                result = ensureDataSource(result);
                var grid = $find("<%=RadGrid1.ClientID %>");
                grid.get_masterTableView().set_dataSource(result);
                grid.get_masterTableView().dataBind();
            }

            function ensureDataSource(result)
            {               
                for (var i = 0, j = result.length; i < j; i++)
                {
                    //ensure current item i.e. result[i] escape();
                }

                return result;
            }
        </script>
    </telerik:RadScriptBlock>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager runat="server" ID="ScriptManager1" EnablePageMethods="true"></asp:ScriptManager>
    <div>
   
    <telerik:RadGrid runat="server" ID="RadGrid1"
        AllowPaging="true" AllowFilteringByColumn="true">
        <MasterTableView AutoGenerateColumns="False" CellSpacing="-1" DataKeyNames="CustomerID"
                    >
            <Columns>
                <telerik:GridBoundColumn DataField="CustomerID" HeaderText="CustomerID"
                    ReadOnly="True" SortExpression="CustomerID" UniqueName="CustomerID">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="CompanyName" HeaderText="CompanyName"
                    SortExpression="CompanyName" UniqueName="CompanyName">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="ContactName" HeaderText="ContactName"
                    SortExpression="ContactName" UniqueName="ContactName">
                </telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="ContactTitle" HeaderText="ContactTitle"
                    SortExpression="ContactTitle" UniqueName="ContactTitle">
                </telerik:GridBoundColumn>   
            </Columns>
        </MasterTableView>
        <ClientSettings>
            <ClientEvents OnCommand="function(){}" />
        </ClientSettings>
    </telerik:RadGrid>            
   
    </div>
    </form>
</body>

 

 

三:escape例子()

This function encodes special characters, with the exception of: * @ - _ + . /

 

<script type="text/javascript">

document.write(escape("Need tips? Visit W3Schools!"));

</script>

 

输出:

Need%20tips%3F%20Visit%20W3Schools%21

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值