【问题标题】:Prevent tags being used in <td>防止在 <td> 中使用标签
【发布时间】:2017-07-17 22:34:09
【问题描述】:

用户可以在我的网站上发送 cmets,这些 cmets 显示在表格中。问题是,如果用户发送评论,例如 &lt;h1&gt;Hello&lt;/h1&gt;,评论将显示为

Hello

而不是应该的 &lt;h1&gt;Hello&lt;/h1&gt;。可能的解决方案是什么?

【问题讨论】:

  • 你用什么服务器端来处理这个?
  • 将不需要的标签列入黑名单并将它们从输入中删除,和/或将您的输出 HTML 编码回 cmets 区域将是显而易见的选择。无论如何,您应该采取这些措施来防止脚本注入攻击等。您是否进行过任何研究或尝试过任何技术?
  • 这是因为您只是让它通过浏览器将数据解析为html。您需要对其进行编码以显示标签

标签: html css web


【解决方案1】:

您可以使用htmlentities

<?php

  $comments = "A 'quote' is &lt;b&gt;bold&lt;/b&gt;"; 
  echo "<textarea>".htmlentities($comments )."</textarea>";

 ?>

演示:: http://phpfiddle.org/main/code/n0sf-b7ka

您也可以这样做。

  if (isset($_POST["submit"]) && !empty($_POST["comments"])) {

       $comments = $_POST["comments"];

      echo "<textarea>".htmlentities( $comments )."</textarea>";

  }

【讨论】:

    【解决方案2】:

    如果您使用 PHP 作为服务器端,您可以使用 strip_tags() 函数从评论文本中删除所有 html 标签。 https://www.w3schools.com/php/func_string_strip_tags.asp

    【讨论】:

      【解决方案3】:

      关于缺乏详细信息,我可以向您提出这个解决方案:

      使用字符串替换转换所有标签如下:

      <h1>Hello</h1>
      

      应该变成

      &lt;h1&gt;Hello&lt;/h1&gt;
      
      i.e. '<' should be replaced with '&lt;', '>' with '&gt;'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-14
        • 2016-03-22
        • 2017-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-14
        • 1970-01-01
        相关资源
        最近更新 更多