我们一直在讨论javascript中的仅客户端解决方案,它为站点访问者提供了注释页面以进行打印的方法,以及它在XSS或类似攻击向量方面的可利用性。
理由:选择要显示的数据有一个可能很长的过程。为了记录所采取的步骤,提供了一个 textarea (不包含表单),用户可以编写不应该传输到服务器的任意文本。初始文本是静态的,例如一小段说明如何使用此字段,以便攻击者没有(明显的)可能为此textarea构建包含恶意javascript的URL。
用户更改此文本后,会打印页面(及其注释)。一旦用户离开页面,便会丢失注释。
如果“散文错误太多”,这里有一些示例代码:
<span id="descriptionHeader">Description of the result</span>
<div id="description">
<textarea id="descriptionEditor" rows="15" cols="80" type="text"
ondblclick="replaceDescription()">
Edit this text to add a detailed description to this page.
Double click to this editing area to finish editing.
If you want to edit the text again, do a double click to the
description header.
You may use html (e.g. <br>) for formatting.
</textarea>
</div>
<script type="text/javascript">
var header = getElem("descriptionHeader");
var editor = getElem("descriptionEditor");
var description = getElem("description");
function empty() {
}
function editDescription() {
header.ondblclick = empty;
editor.value = description.innerHTML;
description.innerHTML = "";
description.appendChild(editor);
}
function replaceDescription() {
header.ondblclick = editDescription;
description.removeChild(editor);
description.innerHTML = editor.value;
}
</script>
再次:
注意:问题不在于此解决方案的优雅程度,也不是任何可以更直接地编辑内联编辑的库,而是纯粹关于可以想象的安全风险 - 如果有的话。
答案 0 :(得分:2)
社交工程攻击是可能的:要求用户(通过聊天或其他方式)复制粘贴应该是漂亮模板的内容以添加到页面中。
用户看起来可能不像要求密码;但是除了作为有针对性的攻击之外它不会起作用,因为如果在论坛这样的公共场所发布它可能会被标记得非常快。
我没有看到任何自动攻击,因为客户端和服务器之间没有数据来回传递。 所有攻击都是客户端攻击,除社交之外任何可以修改DOM或在页面上调用javascript的客户端攻击都不需要这样做来进行XSS。
请注意,如果社交工程clickjacking需要使用,通过在您的网站上使用多个iframe,将您的网站放在iframe下面,攻击者可以隐藏表单就是您的网站上的那个网站,但他们仍然需要欺骗用户将javascript代码复制粘贴到输入文本框中。
为了在不丢失HTML功能的情况下保护输入,您可以通过将代码(例如stackoverflow one)移植到javascript来过滤HTML(或者很好地询问实时预览中使用的javascript版本的许可证)。 / p>
答案 1 :(得分:2)
description.innerHTML = editor.value;
虽然通过键入合适的&lt; script&gt;确实相对不太可能说服用户妥协自己。标签,是否真的有必要允许他们输入HTML?如何简单地逃避价值:
function escapeMultiline(s) {
return s.split('&').join('&').split('<').join('<').split('\n').join('<br />');
};
description.innerHTML= escapeMultiline(editor.value);
然后用户可以愉快地键入&lt;字符和换行符,不会被误解为HTML。
(当然,在回来的路上也有类似的去逃避。)
答案 2 :(得分:0)
不知道整个申请。我认为有可能攻击你的系统。如果他们可以从其他页面看到一些有效的js /其他调用,他们可以在此页面中注入该代码以尝试更改后端数据。如上所述,可能取决于您构建系统的方式。
/阿尔贝托