【发布时间】:2019-11-15 10:48:58
【问题描述】:
在我的数据库中,我有以下代码:<script>alert(1);</script>
我想在内容可编辑 (https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/contentEditable) 中显示此内容,而不触发警报(通常是 XSS),显示 <script>alert(1);</script> 而不显示 <script>alert(1);</script>
我已经完成了 htmlspecialchars_decode、html_entity_decode 等,但我不知道需要什么
我们正在使用http://documentation.custhelp.com/euf/assets/devdocs/cloud19b/Connect_PHP/Default.htm,因此无法使用准备好的语句。数据的存储方式是这样的:
$objective = RNCPHP\objectives::fetch($id);
$objective->description = empty($description) ? '-':$description;
$objective->archive = 0;
$objective->save();
RNCPHP\ConnectAPI::commit();
只显示内容就可以了。但是,如果我添加一些空格(假设它是一段很长的文本),那么它会显示
标签而不是空格
谢谢
【问题讨论】:
-
我不明白。您在 db 中的数据是否已经进行了 HTML 编码?
-
最好将其存储在数据库中而不进行任何编码(使用准备好的语句来存储它)。使处理数据变得更加容易。显示时根据需要进行编码/解码。
-
抱歉 - 应该补充一下,我使用的是 Oracle 服务云,默认情况下它会这样做 - 不能使用准备好的语句
-
<script>标签在 HTML 中有特殊处理,例如,据我所知,它是唯一一个在 javascript 字符串中使用关闭 (</script>) 的标签实际上关闭了当前打开脚本标签而不是留在字符串中。您必须选择显示禁用脚本执行的字符 (&lt;/&gt;) 或收到有关 XSS 注入的通知,不能两者兼得。请注意,&lt;应该呈现为<,如果不是,您应该在此处重现问题,以便我们为您提供帮助
标签: php xss contenteditable