Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果我';我在使用HTMLPurifier?_Php_Html_Security_Xss_Htmlpurifier - Fatal编程技术网

Php 如果我';我在使用HTMLPurifier?

Php 如果我';我在使用HTMLPurifier?,php,html,security,xss,htmlpurifier,Php,Html,Security,Xss,Htmlpurifier,我一直在“喷洒” htmlentities($user_input, ENT_QUOTES, 'UTF-8') 在我的整个视图中,无论何处,我都会回显用户有机会在我的应用程序中输入的数据 这非常乏味,我想知道在我的控制器中使用HTMLPurifier是否可以安全地替代在视图的每个echo中使用htmlentities 例如,我注意到HTMLPurifier一个人会尝试关闭一个打开的,而不是将其删除,因此如果某个smartass以Johnny的身份输入他的名字,并且我在视图中对其进行了echo处

我一直在“喷洒”

htmlentities($user_input, ENT_QUOTES, 'UTF-8')
在我的整个视图中,无论何处,我都会回显用户有机会在我的应用程序中输入的数据

这非常乏味,我想知道在我的控制器中使用HTMLPurifier是否可以安全地替代在视图的每个
echo
中使用
htmlentities

例如,我注意到HTMLPurifier一个人会尝试关闭一个打开的
,而不是将其删除,因此如果某个smartass以
Johnny
的身份输入他的名字,并且我在视图中对其进行了
echo
处理,则会破坏我的整个布局

但是如果我单独使用
htmlentities
,我会

Johnny<div>
约翰尼 我的布局也保留了下来

所以我想知道这是不是HTMLPurifier配置的问题,或者最好的做法是将其与
htmlentities
结合使用

我知道HTMLPurifier还有其他的函数来重新遵从和有效的HTML,但我最关心的是XSS


你怎么看?

如果你担心XSS,那么就使用(没有理由使用全面的
htmlentities
),你就是黄金:

echo htmlspecialchars($user_input);
HTMLPurifier只有在您希望允许一些HTML功能的同时仍然阻止XSS时才有意义。但是,与其他任何代码一样,它也有可能在某个时候不能像广告中所宣传的那样工作。就我个人而言,我不会去那里

更新:

是的,
htmlspecialchars
支持附加标志(包括
ENT\u引号
)。但是,只有在以下情况下才需要使用
entu QUOTES

  • 您正在输出HTML属性的值
  • 您已将值括在单引号内
因此,例如,您将需要
entu引号

<p><?php echo htmlspecialchars($input); ?></p>

或在此:

<p id="<?php echo htmlspecialchars($input); ?>"></p>

不同的目的。HP用于清理HTML,这样用户就可以实际提交HTML,作为实际的HTML使用

如果您希望使用文本,而不希望将其用作HTML,那么通常
htmlspecialchars
。它特别适合可能以某种方式在标记属性中结束的文本字符串

如果您只想显示文本,那么您甚至应该更喜欢组合:

 htmlspecialchars(strip_tags($input), ENT_QUOTES, "UTF-8")

(显然,HP是没有意义的。
strip_tags()
本身就足以防止XSS,只要内容只在文本节点中输出,而不是在任何属性中输出。)

如果您希望用户能够编写HTML,那么HTMLPurifier似乎是一个很好的解决方案——但从您编写的内容来看,似乎您不希望也不需要用户输入HTML,在这种情况下,它根本不是解决方案(正如您所提到的,它允许例如div元素)


另一方面,HtmlEntities会逃避用户输入,因此这是大多数XSS和阻止HTML的方法。但是,请注意,htmlEntities不会保护您免受所有XSS攻击。例如,如果您在HTML属性周围使用单引号,并允许将用户输入插入属性值,则恶意用户可以通过传递“单引号”字符来攻击您,从而转义您的引号。要避免这种情况,您需要使用ENT_QUOTES选项。PHP.net上的其他人提到,还需要特别注意注释中的双破折号。

是否有
htmlspecialchars
上的标志?我想知道增加安全性是否需要
entu QUOTES
,使用
htmlentities
是否会影响性能为什么每个人都这么支持
htmlspecialchars
?这是不可测量的<代码>ENT_QUOTES仅当内容最终出现在属性上下文中的标记中时才有必要再次引用。是的,在这种情况下,某些用户数据可能在我的应用程序的属性中,也可能在jQuery字符串中,如果需要的话。另外,如果其中任何一个最终出现在JS上下文中,则使用
json\u encode
。(有时也可以选择。不是为你。)thx philipp-我的应用程序不是为用户提交HTML而设计的,因此你是正确的HTMLPurifier似乎不是应该做的
不是设计的
并不意味着HTML不会被提交(恶意)。关于“喷洒”:使其成为一个短包装函数
HTML(“文本”)
或只是
h()
。安全性最好通过简单性而不是语法开销来实现。+1计划为此创建一个助手函数,并从视图中调用它,而不是在每个
echo上使用上面的完整语法
 htmlspecialchars(strip_tags($input), ENT_QUOTES, "UTF-8")