这个问题的所有答案都是陈旧的。在2016年我找不到2016年以上的任何内容。 HTML5的contenteditable=true
属性是否安全?我没有看到它用得太多。我有什么安全使用它?
编辑: 从旧答案开始,现在看来它已被广泛接受,http://caniuse.com/#search=contenteditable
编辑: 当我说安全时,我的意思是我如何确定输入它的人是安全的?我应该寻找什么样的问题? XSS?还有别的吗?
编辑:我正在将编辑过的内容发送到服务器。 HTML5属性有什么不同,我不会对任何输入元素做什么?
答案 0 :(得分:4)
完全安全。 contenteditable属性是枚举属性,其关键字为空字符串,true和false。空字符串和true关键字映射到true状态。 false关键字映射到false状态。此外,还有第三个状态,即继承状态,它是缺省值缺省值(默认值无效)。
contenteditable="" or contenteditable="true"
表示该元素是可编辑的。
contenteditable="false"
表示该元素不可编辑。
contenteditable="inherit"
表示如果元素的直接父元素是可编辑的,则该元素是可编辑的。这是默认值。
当您向元素添加contenteditable时,浏览器将使该元素可编辑。此外,除非子元素具有明确的可信度,否则该元素的任何子元素也将变为可编辑状态=" false"。
答案 1 :(得分:2)
我认为“安全”是指用户可能通过复制Word或其他网页或聊天应用程序中的内容来意外触发XSS或类似内容。
嗯,这取决于:
您可以在内容可编辑的iframe上使用sandbox="allow-same-origin"
属性,这将阻止所有javascript在iframe中执行。
为防止加载外部资源,您可以提供CSP,该CSP将资源限制在您的域中,或者完全禁止外部资源。
但是请紧记::如果iframe与父网站的来源相同,则iframe中的CSP也会限制某些浏览器中的父网站。 必须具有相同来源才能访问iframe的已编辑内容。
不过,您可以使用放置在不同来源的iframe,并通过包含contenteditable
iframe的CSP对其进行限制,该iframe如上所述被沙盒化。第一个iframe(包含沙盒)可以使用javascript
和message passing
与您的顶级页面/来源进行通信。
据我所知,您不需要在服务器端执行特殊操作。您可以使用contenteditable进行的所有操作都可以使用纯文本区域完成。 使用HTML Purifier或基于白名单的类似过滤器。
答案 2 :(得分:1)
对于初学者来说,并非所有浏览器都支持它。其次,就安全性而言,它只是一个允许内容编辑的客户端属性。例如:我只需打开控制台并添加contenteditble="true
"即可从我的浏览器中删除网页上的所有内容和元素。到你的身体标签。现在......它不会损害您的网站,因为它不会影响服务器端。这取决于你的用例。你是如何考虑使用它的?它不会比任何形式的表格输入更危险。