我们一直在讨论 javascript 中的仅客户端解决方案,该解决方案为站点访问者提供了注释打印页面的方法,以及它在 XSS 或类似攻击向量方面的可利用性。
基本原理:选择要显示的数据可能需要很长时间。为了记录所采取的步骤,提供了一个textarea(不包含form),用户可以编写不应该传输到服务器的任意文本。初始文本是静态的,例如一组简短的说明如何使用该字段,因此攻击者没有(明显的)可能为该文本区域构造一个包含恶意 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>
再次:
- 文本永远不会在服务器端处理,只有静态描述(“如何使用”)从服务器发送到客户端,从不从客户端发送到服务器。
- 用户可以根据自己的喜好添加 javascript 元素并利用自己的地狱。
- 我想不出这会带来安全风险的情况,但一种不安的感觉仍然存在……
注意:问题不在于此解决方案的优雅性或任何内联编辑更舒适的库,而纯粹是关于可想象的安全风险 - 如果有的话。