当前位置:  开发笔记 > 编程语言 > 正文

为什么需要进行如此多的HTML输入清理?

如何解决《为什么需要进行如此多的HTML输入清理?》经验,为你挑选了1个好方法。

我在我的html网站上用C实现了一个搜索引擎.我的整个网络都用C编程.

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



难道只是通过搜索"<"和">"并从搜索查询中删除它们来阻止这些攻击吗?这不会导致两个脚本无用,因为它们不会被视为html吗?我已经看到html过滤超出了这个范围,他们绝对过滤所有JavaScript命令和html标记!



1> bobince..:

输入消毒本身并非"必要".

最好删除输入中你从不想要的控制字符之类的东西,当然对于你想要特定类型检查的特定字段(例如,电话号码包含数字).

但是,为了打败跨站点脚本攻击,在所有表单输入中运行转义/剥离功能绝对是错误的.这很遗憾,但在许多情况下,既不必要也不足以防止XSS.

HTML转义是一个输出问题,必须在输出阶段解决:也就是说,通常在将字符串模板到输出HTML页面时.转义<to <,&to &和in属性值会转义您用作属性定界符的引用,就是这样.不能进行HTML注入.

如果您尝试在表单输入阶段进行HTML转义或过滤,那么每当您输出来自不同来源的数据时,您将会遇到困难,并且您将要修改恰好包含的用户输入<,&并且"字符.

还有其他形式的逃避.如果您尝试使用用户值创建SQL查询,则需要在此时执行SQL字符串文字转义,这与HTML转义完全不同.如果要将提交的值放在JavaScript字符串文字中,则必须执行JSON样式的转义,这也是完全不同的.如果要在URL查询字符串参数中放置值,则需要进行URL转义,而不是HTML转义.处理此问题的唯一合理方法是将字符串保持为纯文本,并仅在将它们输出到HTML之类的不同上下文时将其转义.

难道只是通过搜索"<"和">"并从搜索查询中删除它们来阻止这些攻击吗?

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

< 是一个有效的字符,用户应该被允许键入,并且应该在页面上以字面小于号的形式出现.

我的整个网络都用C编程.

我很抱歉.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有