HTML 标签提取器






2.39/5 (12投票s)
2005年6月3日
2分钟阅读

49885

955
本文提供了一种防止 HTML 或 JavaScript 注入到您的字段中的解决方案。
引言
在开始代码解释之前,我想问一个问题。如果有人在 Web 表单的文本框中输入 HTML 标签或 JavaScript,您会怎么做?
好的,我写了这篇文章并附上了我用来验证或更准确地说,提取文本框中输入的标签的代码。虽然 ASP.NET 1.1 本身包含一个可以检测输入字段中输入的标签的检测器,但如果您不需要这些标签,最好自己提取这些标签。
注入不需要的标签或脚本可能会使您的结果或输出数据变得不可预测。例如,如果您有一个文本框,它将在数据库中保存一个用户名,用户输入的是 <b>HisName</b>,并且另一个页面显示表中的所有用户,那么带有 <b></b> 标签的用户名将以粗体显示。
例如
用户名 |
Abdullah |
HisName |
Omar |
附加的代码包含两个部分,一个用于 ASP.NET,另一个用于 VB.NET。我将解释对于两者都相同的类。
使用代码
类 Extractor
包含一个返回 string
类型的公共函数 Extract
,以及两个私有函数 FoundOpener
、CalculateLength
。
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
最后
如果您对此技术有任何建议,或者您有其他处理此类情况的方法,请告诉我。
此致。