pep*_*epe 3 html php security xss htmlpurifier
我一直在'洒'
htmlentities($user_input, ENT_QUOTES, 'UTF-8')
Run Code Online (Sandbox Code Playgroud)
在我的观点中,无处不在,我回应用户有机会在我的应用中输入的数据.
这非常繁琐,我想知道在我的控制器中使用HTMLPurifier是否可以安全地替代在视图中使用htmlentities
每一个echo
.
我已经注意到,单独的HTMLPurifier将尝试关闭一个打开<div>
而不是删除它,所以如果一些smartass输入他的名字,Johnny<div>
而我echo
在我的视图中,它会破坏我的整个布局.
但如果相反,我会htmlentities
独自使用
Johnny<div>
Run Code Online (Sandbox Code Playgroud)
我的布局得以保留.
所以我想知道这是否是HTMLPurifier配置的问题,或者最佳做法是与它一起使用它htmlentities
.
我理解HTMLPurifier有其他功能符合要求和有效的HTML,但我最关心的是XSS.
你怎么看?
如果你担心XSS然后使用htmlspecialchars
(没有理由使用全面的htmlentities
),你是金色的:
echo htmlspecialchars($user_input);
Run Code Online (Sandbox Code Playgroud)
HTMLPurifier仅在您希望允许某些 HTML功能同时仍然阻止XSS 时才有意义.但是,与任何其他代码一样,它有可能在某些时候不如广告那样有效.就个人而言,我不会去那里.
更新:
是的,htmlspecialchars
确实支持其他标志(包括ENT_QUOTES
).但是,仅在以下ENT_QUOTES
情况下需要:
因此,例如,你会不会需要ENT_QUOTES
在这里:
<p><?php echo htmlspecialchars($input); ?></p>
Run Code Online (Sandbox Code Playgroud)
或者在这里:
<p id="<?php echo htmlspecialchars($input); ?>"></p>
Run Code Online (Sandbox Code Playgroud)
您将在这里需要它:
<p id='<?php echo htmlspecialchars($input, ENT_QUOTES); ?>'></p>
Run Code Online (Sandbox Code Playgroud)