我正在使用Pagedown构建一个包含用户生成内容的网站(虽然任何形式的Markdown都可以使用),我希望将原始markdown和已清理的HTML存储在数据库中,以便用户可以返回并编辑原始输入。不过,我不确定如何安全地重新显示原始降价,而不会受到XSS的攻击。例如,如果用户输入以下内容作为输入:
</textarea>
<script>MaliciousCode();</script>
最初输入时会很好,因为Pagedown会对其进行清理并将其转换为HTML,此HTML会被发送到服务器(无论如何都会再次剥离非白名单的HTML标记,因为我无法单独信任客户端清理)。但是当原始降价发送回客户端进行编辑时,它变为:
<textarea class="wmd-input" id="wmd-input" name="wmd_area" >
</textarea>
<script>MaliciousCode();</script>
</textarea>
现在它很容易受到XSS的攻击。有人可以建议如何允许编辑存储的降价的网站使这个安全,或者我应该做什么更好的方式,这不会是一个问题?我知道textarea标签将被剥离,因为它没有列入白名单,但是这需要从原始markdown中删除标签,然后再将其转换为HTML,这从我读过的内容将搞砸了原来的降价,不应该这样做。 / p>