65.9K
CodeProject 正在变化。 阅读更多。
Home

HTML 标签提取器

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.39/5 (12投票s)

2005年6月3日

2分钟阅读

viewsIcon

49885

downloadIcon

955

本文提供了一种防止 HTML 或 JavaScript 注入到您的字段中的解决方案。

Sample Image

引言

在开始代码解释之前,我想问一个问题。如果有人在 Web 表单的文本框中输入 HTML 标签或 JavaScript,您会怎么做?

好的,我写了这篇文章并附上了我用来验证或更准确地说,提取文本框中输入的标签的代码。虽然 ASP.NET 1.1 本身包含一个可以检测输入字段中输入的标签的检测器,但如果您不需要这些标签,最好自己提取这些标签。

注入不需要的标签或脚本可能会使您的结果或输出数据变得不可预测。例如,如果您有一个文本框,它将在数据库中保存一个用户名,用户输入的是 <b>HisName</b>,并且另一个页面显示表中的所有用户,那么带有 <b></b> 标签的用户名将以粗体显示。

例如

用户名
Abdullah
HisName
Omar

附加的代码包含两个部分,一个用于 ASP.NET,另一个用于 VB.NET。我将解释对于两者都相同的类。

使用代码

Extractor 包含一个返回 string 类型的公共函数 Extract,以及两个私有函数 FoundOpenerCalculateLength

Extract 函数将搜索输入的文本,并搜索任何 "<" 字符。 如果找到,则调用 FoundOpener 函数,该函数接受两个参数,即正在验证的文本和 "<" 的位置。

FoundOpener 将搜索字符 ">",它是标签的闭合符,并将返回其位置。 如果未找到,则表示此标签未关闭,则该位置将是输入文本的长度,并且打开后的所有文本将被删除。

在确定了闭合字符的位置后,将执行另一个名为 CalculateLength 的函数来计算 <> 之间文本的长度。 例如,<center> 的长度为 8。此函数将开始和结束位置作为参数。 Start 是 "<" 的位置,end 是 ">" 的位置。 长度通过从结束位置减去开始位置来计算。

Extract 函数

Remove 是一个内置函数,用于字符串变量中删除字符片段

Public Function Extract(ByVal srctext As String, _
                ByVal sender As frmTagExtractor) As String
 Dim TotalChars As Long
 Dim Counter As Long
 Dim CloserPosition As Long
 Dim length As Long
 Dim Extracts As String
 Dim srcLength As Long = Len(srctext) - 1

 Do While Counter <= srcLength
    If srctext.Chars(Counter) = "<" Then
        CloserPosition = FoundOpener(srctext, Counter)
        length = CalculateLength(Counter, CloserPosition)
        srctext = srctext.Remove(Counter, length)

        srcLength = Len(srctext) - 1
        Counter -= 1
    End If
    Counter += 1
 Loop

 Return srctext
End Function

FoundOpener 函数

VB.NET 中的 InStr 内置函数将在字符串中搜索内容

Public Class Extractor
  Private Function FoundOpener(ByVal text As String, _
                   ByVal Position As Long) As Long
    Dim CloserPosition As Long
    CloserPosition = InStr(Position + 1, text, ">", CompareMethod.Binary)
    If CloserPosition = 0 Then
      CloserPosition = Len(text)
    End If
  Return CloserPosition
 End Function

CalculateLength 函数

Private Function CalculateLength(ByVal start As Long, _
                 ByVal final As Long) As Long
  Return Math.Abs(final - start)
End Function

最后

如果您对此技术有任何建议,或者您有其他处理此类情况的方法,请告诉我。

此致。

© . All rights reserved.