在发布内容时,它是否智能使用HTML

时间:2018-05-13 20:41:03

标签: php

我正在创建一个投资组合。我有一个PHP的管理页面设置。我希望用户将内容从管理面板发布到主页面。我可以这样做,但在考虑发布"文本功能的方法时,我有点卡住了。像图像和粗体文字。在HTML中,这很简单。

<img alt="A pretty kitten" src="src/img.png">

但是,在发布内容时让用户使用HTML真的很聪明,如果不是,为什么,还有什么好的选择吗?

3 个答案:

答案 0 :(得分:3)

不,让用户在帖子中使用html绝对不是一个好主意。这使您的应用程序容易受到XSS Attacks

的攻击
  

跨站点脚本(XSS)是Web应用程序中常见的一种计算机安全漏洞。 XSS使攻击者能够将客户端脚本注入其他用户查看的网页中。攻击者可能会使用跨站点脚本漏洞绕过访问控制,例如同源策略。

回到你的问题。有几种方法可以解决这个问题,其中一个最简单的解决方案是为HTML使用不同的标记,在用户发布的内容上使用htmlentities(),然后再将其存储到数据库中。 并且要向用户显示格式化的内容,您可以解析您在HTML变体中制作的标记。

示例用户输入:

<b>This is a normal text</b> [b]and this is a bold text[/b]

通过htmlentities()函数传递该字符串后,标准HTML <b></b>标记将被解释为纯文本,并且在显示内容时不会实际加粗文本。

要使句子的第二部分变为粗体,您必须使用将[b][/b]标记解析为<b></b>个标记的函数。

以下是如何执行此操作的示例:

function formatString($string) {
    $string = preg_replace('/\[b\]/', '<b>', $string);
    $string = preg_replace('/\[\/b\]/', '</b>', $string);
    return $string;
}

答案 1 :(得分:1)

您可以使用的一个选项是允许用户发布HTML的有限子集。有各种各样的方法,但我最喜欢的是HTML Purifier(没有联盟,只是粉丝),它允许(通过extensive config)只有某些HTML标签,属性等的安全白名单。

即。您可以允许<img src="">但不允许<img onclick="">

答案 2 :(得分:0)

允许任何人向您的网站发布任何HTML,这是一个巨大的风险。他们可以进行跨站点搜索,将用户转发到不适当的页面,包括非法内容等。

正如评论中已经提到的,许多CMS都为此提供了解决方案。如果您不想使用CMS,可能还需要查看BBCode。应该有一些库来解释BBCode和BBCode编辑。此外,不要低估许多用户熟悉这一事实的事实。

BBCode允许用户对其文本进行样式化,发布图像等,但可以防止恶意内容。