2

https://www.owasp.org/index.php/PHP_Top_5#How_to_Determine_if_you_are_Vulnerable_2链接,标题 P2:跨站点脚本 > 如何防范它;在第 4 和第 5 项中写道:

  1. 第 4 项:自由文本输入只有在使用 HTML 实体后才能安全地重新显示给用户
  2. 第 5 项:通过 URL 发送回用户的变量必须使用 urlencode() 进行 URL 编码,但不推荐使用 GET 请求用于导航以外的任何用途

我的问题

第一季度

对于第 4 项,它明确表示can only但我记得我读过这htmlspecialchars()htmlentities(). (关于 . 的优越性的示例源链接htmlspecialchars。请阅读Pornel_的评论:在 PHP 站点中避免 xss 攻击的最佳实践是什么)所以我在输入 OWASP 后感到困惑。当我将 MySQL 用户输入的数据作为 html 打印到屏幕上时,我是否应该用我使用的htmlspecialchars()替换我 的。htmlentities()

第二季度

对于我的表单(添加文章、添加评论、向管理员发送电子邮件),我使用Post - Redirect - Session Variables流程。(我的解释对你来说可能很愚蠢,但我的意思是我不在GET流程的第三步使用。GET我使用Session变量而不是 。)所以我还需要urlencode()Session变量的某个地方使用吗?(注意:即使你是,我也不知道HOW,那是我要研究的另一个话题,我暂时只想学习yes或no以及为什么我在我的文章中找不到这个问题的答案研究。当然,如果您也定义了 HOW 部分,我们将不胜感激)

提前
致谢

4

1 回答 1

2

专注于为什么你必须做这两点而不是如何做。如何始终只是关于您如何“可能”满足要求的提示。但是,如果您只是使用其他人告诉您的内容,您就有可能无法完全理解原因,因此会在不知不觉中重新引入安全风险。

4)此建议试图避免用户“突破”您的输入/文本区域字段。自己检查一下,如何在您的表格中做到这一点并采取行动。通常,文本输入可以用正确的引号分解:

$value = '\'/>警报("你好");'; 回声'

所以在这种情况下过滤双引号就足够了(如果我错了,请纠正我)。但是过滤所有你不需要的东西总是更好。首选白名单而不是黑名单过滤器。

5) 这试图避免您的 URL 格式错误。目前无法为您提供一个很好的攻击示例,但即使是格式错误的 url 也可能会使您的应用程序无法使用。

顺便说一句,典型的 PHP 会话 ID 只是纯文本和 URL 安全的。将它们存储在具有“仅 http”设置的 cookie 中会更好。除了会话 id 之外,您不需要任何东西来进行正常的会话处理。

所以,是的。使用您提到的这些技巧,但要了解它旨在防止的攻击,而不仅仅是使用它们,因为polep 也会告诉您。

于 2013-04-18T08:07:58.673 回答