【问题标题】:php How to show original searched query on html page using while using htmlentitiesphp如何在使用htmlentities时在html页面上显示原始搜索查询
【发布时间】:2014-07-21 16:43:44
【问题描述】:

我在 html 页面上回显搜索到的查询时使用 htmlentities 以防止 XSS 攻击(这就是我读到的),

我在 2 个地方展示它,像这样

<?echo htmlentities($_GET['q']);?>

但这会将一些字符转换为它们的 html 等价物,例如

< becomes &lt;
> becomes &gt;

如何显示原来输入的值,又如何防止xss攻击。

我看到一些网站显示用户输入的确切值。他们是怎么做到的?

更新:

我正在向用户显示搜索查询。 我正在使用获取参数进行搜索查询,并且在显示它时,我正在使用 htmlentities。

但在普通浏览器中是showing &amp;lt; instead of &lt;

while in other sites it shows exactly &lt; in normal browser and in source it shows &amp;lt;

更新:

使用

$searchq = htmlentities($q, ENT_QUOTES,'UTF-8', false);

解决了这个问题,需要检查双重htmlentities被应用在哪里。

【问题讨论】:

  • 您是在浏览器中查看吗?使用 HTML 实体的全部意义在于它执行那些替换——这就是 HTML 实体 。在浏览器中,这些实体(例如&amp;lt;)应该显示为它们对应的字符(例如&lt;)。如果您查看这些网站的源代码,您会发现它们也在使用 HTML 实体。
  • 是的,我正在浏览器中查看,那么他们是如何做到这一点的。?它在浏览器中看起来很正常,而在源代码中它显示 html 等效值。
  • 对——这实际上不是他们正在做的事情。浏览器为他们做这件事。它会看到这些 HTML 实体,并知道在将它们显示给最终用户时将它们转换为相应的字符。当您在自己的网页中使用它们并在浏览器中打开该页面时,您看到的是 HTML 版本,还是您想看到的版本?你不需要做任何特别的事情。
  • 我看到的是html版本,而我想看到
  • 当您在页面上使用“查看源代码”时,您会看到什么?我的猜测是它看起来像&amp;amp;gt;,表明它已被转义(htmlentities/htmlspecialchars)两次。 (&amp;amp;&amp; 的转义形式)。在这种情况下,您需要追踪发生这种情况的位置,因此您只需在显示之前将其转义一次。

标签: php html xss html-entities


【解决方案1】:

您在查询中输入的内容不必与您在网页上显示的内容相同,对吧? 例如,您可以将原始$_GET 保存在会话中,并将其显示在您使用htmlentities($_SESSION['search_query']) 的网页上,即

如果您一直重新加载查询并使用htmlentities($_GET);,那么您可以预期在第二次加载后会出现类似htmlentities(htmlentities($_GET)); 的内容,这将显示奇怪的输出。

此外,htmlentities 用于将字符转换为 html 实体的目的。 我建议使用 mysqli_real_escape_string 甚至更好的准备语句。 http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

【讨论】:

  • 他没有提到数据库。虽然你是对的,但他应该使用准备好的语句将内容输入数据库,然后在将其放入网页之前进行 HTML-escape 数据库输出。
  • 不,我想要输入的字符串按原样显示而不会导致 xss 漏洞。我正在使用 htmlentities 并将其转换为 <
  • 那你为什么不直接回显不带函数呢?
  • 因为我读到它将允许 xss 攻击者在我的网站中包含恶意代码。要么这个,要么我读错了。
  • 所以查询不仅仅是一个搜索查询?您是否也向其他用户显示查询? IMO,如果您将其转换为 html 实体并且它在浏览器中显示良好,为什么还要麻烦 & 变成 &?这是预期行为并符合 w3c 标准。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-04
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-08-16
  • 2023-03-31
  • 2018-03-26
相关资源
最近更新 更多