bs4:区分文本和HTML语言

2024-05-14 22:57:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图分离XSS有效载荷,用不同的方法分析它们的结构。 示例有效负载如下所示:

<picture><source srcset="x"><img onerror="***payload***"></picture>

现在我需要将不同的部分分开以得到以下输出:

picture source srcset x img onerror ***payload***

我的问题是,有时有效负载包含文本内容,有时又包含另一个HTML元素(如示例中所示)作为内容。如果我简单地附加“upper”HTML元素的内容,输出将是错误的,因为我将在该元素上进行第二次迭代。你知道吗

我的代码如下所示:

for x in self.normalized_payloads:
tmp = []
soup = BeautifulSoup(x, 'html.parser')
elements = soup.find_all()
for y in elements:
    tmp.append(y.name)
    for u in y.attrs.keys():    
        tmp.append(u)
        tmp.append(y.attrs[u])
seperated_payloads.append(tmp)

如何区分文本和作为HTML元素内容的另一个HTML元素?您是否有其他方法来获得这个输出,而不必遍历负载的每个HTML元素?你知道吗


Tags: 方法in元素示例source内容imgfor
1条回答
网友
1楼 · 发布于 2024-05-14 22:57:17

所以,我想出了一个可行的解决方案:

if len(BeautifulSoup(y.decode_contents(formatter="html"),'html.parser').find_all()) == 0 and y.decode_contents(formatter="html") != "":
    tmp.append(y.decode_contents(formatter="html"))

这段代码检查子元素是可解析的HTML元素还是文本。你知道吗

相关问题 更多 >

    热门问题