提问人: 提问时间:4/10/2022 更新时间:4/11/2022 访问量:351
Checkmarx XSS同时使用htmlpurifier
Checkmarx XSS while using htmlpurifier
问:
我有一个 php 页面,它回显如下:
echo "<div>" . $_REQUEST["id"] . "</div>";
这导致了 XSS 问题,我试图通过引用清理 $_REQUEST 的函数使用 htmlpurifier 修复该问题,从而导致以下代码:
function sanitizer(array &array) {
foreach ($array as $key => $value) {
$array[$key] = htmlpurifierInstance->purify($value);
}
}
sanitizer($_REQUEST);
echo "<div>" . $_REQUEST["id"] . "</div>";
在另一次checkmarx测试后,问题仍然弹出,这个问题的解决方法是什么?
答:
0赞
IMSoP
4/10/2022
#1
清理 HTML 应该是一个非常罕见的要求,而不是你经常在所有输入上做的事情。
- 每当某个值的有效值范围有限时,请对其进行验证。如果它无效,请拒绝它或取消设置它。因此,如果“id”应该是一个数字,则拒绝非数字输入。
- 每当在某处输出或发送任何变量时,请将其转义为相关上下文。在本例中,您是在 HTML 上下文中输出,因此请使用 .这不是您可以提前执行的操作,因为同一变量可能会在多个上下文中使用。
htmlspecialchars
- 对于数据库查询的特定情况,不要使用转义,而使用参数化查询。
- 在极少数情况下,您确实需要用户能够输入 HTML,请提出一个严格的标签和属性白名单,并根据该白名单清理特定变量,作为输入处理的一部分。(这就是 HTMLPurifier 的用途。
永远不要尝试编写“通用”清理或转义函数。充其量,您最终会通过一次应用太多东西来破坏数据;在最坏的情况下,你会破坏自己的安全。
评论
0赞
pinkgothic
4/11/2022
很好的答案!为了消除歧义,对您帖子的要点 #4 进行了小补充:HTML Purifier 就是这样一个白名单。但是,是的,对于大多数钉子来说,它通常是错误的锤子。:)
0赞
IMSoP
4/11/2022
@pinkgothic确实,编辑:)
下一个:获取标记化文件列表并部署它们
评论