【问题标题】:PHP: Display <script> tag safelyPHP:安全地显示 <script> 标签
【发布时间】:2019-11-15 10:48:58
【问题描述】:

在我的数据库中,我有以下代码:&amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt;

我想在内容可编辑 (https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/contentEditable) 中显示此内容,而不触发警报(通常是 XSS),显示 &amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt; 而不显示 &amp;lt;script&amp;gt;alert(1);&amp;lt;/script&amp;gt;

我已经完成了 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 服务云,默认情况下它会这样做 - 不能使用准备好的语句
  • &lt;script&gt; 标签在 HTML 中有特殊处理,例如,据我所知,它是唯一一个在 javascript 字符串中使用关闭 (&lt;/script&gt;) 的标签实际上关闭了当前打开脚本标签而不是留在字符串中。您必须选择显示禁用脚本执行的字符 (&amp;lt; / &amp;gt;) 或收到有关 XSS 注入的通知,不能两者兼得。请注意,&amp;lt; 应该呈现为 &lt;,如果不是,您应该在此处重现问题,以便我们为您提供帮助

标签: php xss contenteditable


【解决方案1】:

其实这应该没问题。

<?php
$var = "&lt;script&gt;alert(1);&lt;/script&gt;";

echo $var;
?>

【讨论】:

  • 这仍然会触发警报
  • @pee2pee 误解对不起。更新
  • 是的 - 我现在记得 - 抱歉,已更新问题。如果我添加大量换行符,它只会显示
    标签
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2012-01-08
  • 2015-08-05
  • 2014-01-13
相关资源
最近更新 更多