我按以下顺序保存了两个版本的用户输入:
将原始降价(可能包含不安全的HTML)加载到textarea中是否存在任何风险?它永远不会在textarea之外显示。
我无法清理markdown,因为它会导致markdown和我正在保存的HTML版本之间出现不一致。
仅供参考:我总是清理SQL,无论我将哪些内容保存到数据库中。
答案 0 :(得分:3)
您不必在那里清理它,只需要正确转义HTML特殊字符,例如<和>。
例如,Stackoverflow允许您在帖子中发布HTML代码,它不会删除任何内容。这是通过编码而不是消毒来实现的。
答案 1 :(得分:1)
这取决于你如何将它“加载”到textarea
中。如果你通过简单的字符串连接在服务器端进行,例如在php中,
$output = '<textarea>' + $markdown + '</textarea>';
...然后绝对存在风险,因为降价可以非常容易地关闭textarea
并嵌入其他任何想要的东西。如果您正在使用某种组件框架(例如,ASP.NET),那么只要您使用安全的API方法(例如MyTextArea.Value = markdown;
),就应该受到保护。
如果你在客户端做这件事,那还取决于你是怎么做的。如果你使用像jQuery的.val()
setter这样的东西你会很安全,但是仍然可以通过其他方法让自己暴露于XSS漏洞。
简而言之,一般答案是肯定的,具体取决于您实际创建和填充textarea
的方式。
答案 2 :(得分:0)
你至少在做SQL卫生吗?当您插入或更新数据时,您是使用某种类型的DAO来逃避SQL,或者,如果使用Java,使用Prepared Statement来设置参数?
在进入数据库之前,您必须始终清理事物。否则人们可能会添加一个迷路
'); --Malicious procedure here.
..进入请求。
在文本框中留下未经过抽样的输入存在一些安全风险;主要是如果用户感染了注入Javascript的东西,每次都会显示给他或她。
为什么要保存呢?那么你给用户一个完全不一致的视图,从他们输入的内容到显示的内容?他们不会匹配。最好清理输入,以便当用户再次查看输入时,他或她可以清楚地看到为了安全起见删除了违规的HTML。