gpt4 book ai didi

html - 为什么需要如此多的 HTML 输入清理?

转载 作者:太空宇宙 更新时间:2023-11-04 13:34:14 25 4
gpt4 key购买 nike

我已经用 C 语言为我的 html 网站实现了一个搜索引擎。我的整个网络都是用 C 语言编写的。

我知道 html 输入清理是必要的,因为攻击者可以将这 2 个 html 片段输入我的搜索页面以欺骗我的搜索页面下载和显示外国图像/脚本 (XSS):

<img src="path-to-attack-site"/>
<script>...xss-code-here...</script>

是否可以简单地通过搜索“<”和“>”并将它们从搜索查询中删除来阻止这些攻击?这不会使两个脚本都变得无用,因为它们不会被视为 html 吗?我已经看到 html 过滤远远超出了这个范围,它们完全过滤了所有 JavaScript 命令和 html 标记!

最佳答案

输入清理并非天生“必要”。

最好在输入中删除控制字符之类的内容,当然对于特定的字段,您需要进行特定的类型检查(例如,电话号码包含数字)。

但是,为了抵御跨站点脚本攻击,在所有表单输入中运行转义/剥离函数绝对是错误的做法。遗憾的是,它很常见,但它既没有必要,在许多情况下也不足以防止 XSS。

HTML 转义是一个必须在输出阶段解决的输出问题:也就是说,通常是在将字符串模板化到输出 HTML 页面的时候。逃脱<&lt; , &&amp; ,并在属性值中转义您用作属性定界符的引号,仅此而已。不可能进行 HTML 注入(inject)。

如果您尝试在表单输入阶段进行 HTML 转义或过滤,那么每当您输出来自不同来源的数据时都会遇到困难,并且您将破坏碰巧出现的用户输入包括 < , &"字符。

还有其他形式的转义。如果您尝试创建包含用户值的 SQL 查询,则需要在此时进行 SQL 字符串文字转义,这与 HTML 转义完全不同。如果您想将提交的值放入 JavaScript 字符串文字中,则必须进行 JSON 样式的转义,这又是完全不同的。如果您想在 URL 查询字符串参数中放置一个值,您需要 URL 转义,而不是 HTML 转义。解决这个问题的唯一明智方法是将字符串保留为纯文本,并且仅在将它们输出到不同的上下文(如 HTML)时才对它们进行转义。

Wouldn't these attacks be prevented simply by searching for '<' and '>' and stripping them from the search query ?

是的,如果您还去掉了 & 符号和引号。但是用户将无法在他们的内容中使用这些字符。想象一下,我们试图在 SO 上进行此对话而无法使用 < , &" !而且,如果您想去除在某些上下文(HTML、JavaScript、CSS...)中使用时可能特殊的每个字符,您将不得不禁止几乎所有标点符号!

<是一个有效字符,应该允许用户输入,并且应该在页面上显示为小于号。

My entire web is programmed in C.

我很抱歉。

关于html - 为什么需要如此多的 HTML 输入清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3849982/

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