【问题标题】:PHP databases - don't want to show javascript codePHP 数据库 - 不想显示 javascript 代码
【发布时间】:2011-08-22 13:29:08
【问题描述】:

我对 PHP 和 JavaScript/CSS 有疑问。

我有带表的数据库。该表有文章的描述。我想呼应数据库中文章的描述。不幸的是,其中许多都包含 JavaScript 或 CSS(然后是一些文章文本),所以当我使用 echo 时,它会显示所有代码(以及该文本之后)。有没有办法不显示 JavaScript/CSS 部分而只显示文本?例如使用 str_replace 和正则表达式?如果是的话,有人可以给我写一下它应该是什么样子吗?

感谢您的帮助,如果您需要更多信息(代码等),请告诉我

【问题讨论】:

  • 没有。您可以混淆您的 CSS 和 JS,但如果有人想要,他们会得到它(“破解”通常的混淆技术也需要 10 秒)。放弃隐藏你的 css / js。
  • 您能否澄清一下:您是要删除脚本和样式,还是只是隐藏它们的代码?
  • 请阅读有关跨站点脚本 (en.wikipedia.org/wiki/Cross-site_scripting) - 将用户输入的 javascript 存储在数据库中,然后将其显示给随机访问者几乎可以肯定是一个巨大的安全漏洞。

标签: php javascript css database


【解决方案1】:

使用HTMLPurifier - 它会从您的文章中删除脚本、css 和任何有害内容。由于它是一个 CPU 密集型操作,因此最好在保存到数据库之前通过 HTMLPurifer 运行文章,然后在每次显示文章时运行它。

【讨论】:

  • 如果我没看错的话,这是解决这个问题的最佳方法。您可能还想向您的用户显示一条短消息,在保存他们的文章时不要输入任何 CSS、HTML 或 Javascript 标记,假设这是一个类似博客的结构并且您的用户正在创建包含 CSS/JS 的内容?如果你想要/需要包含的 JS 并且你可以控制它,我不推荐它,但你不能在不删除功能的情况下从输出中删除它。
【解决方案2】:

如果您想从用户的帖子中删除标签,您可以致电strip_tags。这将摆脱 css 链接、脚本标签等。它不会摆脱 style 属性,但如果您摆脱 divspanp 等,那没关系-- 不会有标签让它驻留。

正如其他人所说,通常最好清理您的输入(在进入数据库之前来自用户的数据),而不是清理您的输出.

【讨论】:

    【解决方案3】:

    如果您想简单地对用户隐藏 JS 和 CSS,您可以使用 Packer 对不太了解的用户混淆 Javascript,使用 Packer 并使用 base 62 编码。 JS 仍然可以工作,但看起来像乱码。请注意,知识渊博的用户可以尝试对代码进行解密,因此 JS 中的任何关键安全风险仍然存在。不要认为任何直接访问你的数据库的 JS 都是安全的;而是从 Javascript 中删除数据库访问以确保安全。如果 JS 只是做一些花哨的事情,比如在页面周围移动元素,那么混淆它可能就可以了。

    仅当您完全控制和了解文章中包含的所有 JS 时才考虑这一点。如果这是您的匿名用户或不是 120% 受信任的用户可以上传的内容,您需要取消该功能并使用 HTML Purifier 删除他们可能添加的任何 JS。为您或您的用户输出用户输入的 JS 是不安全的。

    对于 CSS,我不知道你为什么要隐藏它,而且 CSS 不能像 JS 那样被混淆;样式仍然是简单的英文,你能做的最好的就是删除类/ID名称和空格;不过,输出您生成的 CSS 并不是真正的安全风险,即使人们对其进行逆向工程,我也不会那么害怕。

    同样,如果这是匿名/不受信任的用户可以自己添加到您的网站的内容,那么您根本不希望这样做,因此请删除使用提到的 HTML Purifier Darhazer 上传带有文章的 CSS 的功能。

    【讨论】:

      【解决方案4】:

      您可以尝试以下正则表达式来删除脚本和 css:

      "<script[\d\D]*?>[\d\D]*?</script>"
      "<style[\d\D]*?>[\d\D]*?</style>"
      

      它应该有帮助,但它不能删除所有脚本。比如 onclick="javascript:alert(1)"。

      【讨论】:

      • 我有一个简单的问题 :) 如何让 PHP 不读取 ?> 作为结束标签?因为我不能使用你给我的代码
      • 你可以试试这个:"<script[\d\D]*?>[\d\D]*?</script>" "<style[\d\D]*?>[\d\D]*?</style>"
      猜你喜欢
      • 2013-08-16
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多