Html 文本区域中是否存在未初始化的用户输入显示的风险?
我按以下顺序保存两个版本的用户输入:Html 文本区域中是否存在未初始化的用户输入显示的风险?,html,security,xss,sanitization,Html,Security,Xss,Sanitization,我按以下顺序保存两个版本的用户输入: 不受信任的用户输入原始降价 原始降价存储在一个表中 原始标记的副本将转换为HTML HTML经过净化和持久化,并根据请求显示 仅当用户编辑条目时,才会显示原始降价版本;它被加载到表单的文本区域中 将原始标记(可能包含不安全的HTML)加载到文本区域是否存在任何风险?它永远不会显示在文本区域之外 我无法清理标记,因为它会导致标记与我正在保存的HTML版本之间的不一致 仅供参考:我总是清理SQL,不管我将什么保存到数据库。这取决于您如何将其“加载”到文本区域。如
文本区域。如果您是通过简单的字符串连接在服务器端实现的,例如在php中
$output = '<textarea>' + $markdown + '</textarea>';
$output=''+$markdown+'';
…那绝对是有风险的,因为降价可以很容易地关闭textarea
并嵌入它想要的任何内容。如果您使用的是某种组件框架(例如ASP.NET),那么只要使用安全的API方法,您就应该受到保护,例如MyTextArea.Value=markdown代码>
如果你是在客户端做的,这也取决于你是如何做的。如果您使用jQuery的.val()
setter之类的工具,您将是安全的,但仍然可以通过其他方法暴露自己的XSS漏洞
简言之,一般的答案是肯定的,这取决于您实际如何创建和填充文本区域
您至少在做SQL吗?在插入或更新数据时,您是在使用某种类型的DAO来转义SQL,还是在使用Java时,使用预先准备好的语句来设置参数
您必须始终在事物进入数据库之前对其进行消毒。否则,人们可能会添加一个流浪汉
'); --Malicious procedure here.
…变成一个请求
在文本框中保留未初始化的输入存在一些安全风险;主要是如果用户感染了注入Javascript的东西,每次都会显示出来
为什么还要保存呢?然后你给你的用户一个完全不一致的视图,从他们输入的内容到显示的内容?他们不匹配。最好清除输入,这样当用户再次查看时,他或她可以清楚地看到,为了安全起见,已删除了有问题的HTML 您不必在那里对其进行清理,只需正确转义HTML特殊字符,如<和>
例如,Stackoverflow允许您在帖子中发布HTML代码,它不会删除任何内容。这是通过编码而不是清理来实现的。我会清理所有SQL语句。我绝对需要一个原始版本。这让我的用户能够准确地看到他们在文本区域中输入的内容。我想让他们远离HTML,除非他们选择使用HTML。。。一辆出租车。当你编辑一篇文章时,他们会加载一个原始的降价版本,而不是我们在文章页面上看到的煮熟的HTML版本。你能澄清一下“这是通过编码而不是消毒来实现的”是什么意思吗?举一个小例子会很有帮助。我最近刚刚发布了一个涉及HTML编码的答案——也许它可以作为一个简单的解释:我看到了@jmar777。很好的解释。谢谢我应该把一切都编码。当我不想编码某些标签时,问题就出现了。例如和。。。