gpt4 book ai didi

asp.net - 扩展/覆盖现有的 ASP.NET 控件

转载 作者:行者123 更新时间:2023-12-01 05:13:46 31 4
gpt4 key购买 nike

我有一个包含一大堆标签、文本框和其他 Web 控件的项目。字面上有数百个。

我现在希望能够覆盖某些属性,以便通过反 XSS 库运行内容。例如,当我使用数据库中的数据设置标签的文本属性时,我希望自动运行一个函数来清除任何潜在的恶意代码。

我还尝试使用实现 IExtenderProvider 的类覆盖 text 属性,但我无法得到它的帮助。

如果我从头开始构建它,我可能会选择创建一个继承系统标签类的新标签类。由于项目的规模,我宁愿不这样做。

有什么想法吗?

最佳答案

首先,我要注意避免 XSS 漏洞的正确方法是 在将用户输入嵌入您的页面之前对其进行正确编码 .例如,如果您将纯文本字符串分配给 Label 的 Text 属性。 ,您需要对值进行编码,因为 Text 属性被逐字呈现为 HTML:

label.Text = HttpUtility.HtmlEncode(user.Name)

(注意:“纯文本”是指 < 和 & 等字符没有任何特殊含义的文本。)

其次,作为额外的纵深防御措施,您应该在收集用户输入时对其进行验证。但输入验证确实 不是 否定正确编码用户输入的需要(因为有些东西可能会漏掉)。 始终对用户输入进行编码!

好的,假设您将在时间和测试允许的情况下执行此操作,但您需要快速修复 现在 .您可以创建 control adapters改变特定类型控件的呈现方式。这是一个示例,它为每个 <asp:Label> 添加了一些星号在您的应用程序中:
Imports System.Web.UI
Imports System.Web.UI.WebControls.Adapters

Public Class LabelControlAdapter
Inherits WebControlAdapter

Protected Overrides Sub RenderContents(writer As HtmlTextWriter)
Dim label As Label = Me.Control
label.Text = "***" + label.Text + "***" ' TODO: Use your anti-XSS library
MyBase.RenderContents(writer)
End Sub
End Class

您可以为其他类型的控件创建额外的控件适配器,或修改 LabelControlAdapter嗅探 Me.Control 的类型并做一些不同的事情。

您还需要将一个 .browser 文件添加到您站点的 App_Browsers 文件夹中,该文件夹列出了您正在调整的每种控件类型:
<browsers>
<browser refID="Default">
<controlAdapters>
<adapter
controlType="System.Web.UI.WebControls.Label"
adapterType="TempVBWebApp.LabelControlAdapter, TempVBWebApp" />
</controlAdapters>
</browser>
</browsers>

关于asp.net - 扩展/覆盖现有的 ASP.NET 控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22483396/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com