【发布时间】:2021-01-10 04:18:53
【问题描述】:
我有一个 php 网页,它使用 URL 参数设置一个变量,然后显示在该页面中。 网址:webaddress.com/page.php?id=someCity
我们获取 $_GET['id'] 并将其分配为变量 ($city),然后在页面上使用该变量以某种动态的方法重构静态文本。
例如:
欢迎来到我们关于Somecity的页面。我们可以帮助您找到与 someCity 相关的产品,因为我们在 Somecity 方面拥有丰富的经验。显然,这可以使用<?php echo $city; ?>
我的客户被告知他对跨站脚本 (XSS) 漏洞持开放态度。我的研究表明,iFrame 可用于窃取 cookie 并执行恶意操作。推荐的解决方案是使用 PHP 函数 htmlspecialchars() 将字符更改为“HTML 实体”。我不明白这比使用 strip_tags() 简单地删除所有标签更安全。
所以,我同时使用了字符串替换和大写,因为这也是需要的。
$step1 = str_replace('_', ' ', $_GET['id']); // Remove underline replace with space
$step2 = strip_tags($step1); // Strip tags
$step3 = htmlspecialchars($step2); // Change tag characters to HTML entities
$city = ucwords($step3);
问题:这足以防止 XSS 吗? htmlspecialchars() 是否真的比 strip_tags() 有额外的好处? 我了解基于其他类似问题提交的差异,但想知道每个函数(尤其是 htmlspecialchars() )如何防止 XSS。
【问题讨论】:
-
其他类似,但没有提供“为什么” htmlspecialchars() 肯定会超过 strip_tags(),这似乎是最正确的。
-
你确定吗?那里接受的答案确实很好地解释了为什么
-
@WesleySmith 建议的类似问题并不相同,因为它引用了两种情况(或/或)。对该答案和我的案例的仔细审查表明,按顺序使用两者是回答我的问题并希望在类似案例中帮助其他人的最佳方法。