在这个页面上它说
htmlspecialchars()可以在打印 SID 时使用,以防止与 XSS 相关的攻击。
如果您在不使用的情况下打印 SID,那么有人会进行什么攻击htmlspecialchars()?
会话 ID 只能包含数字和字母。我错过了什么吗?
会话 ID 通常存储在客户端(例如,在 cookie 或GET参数中),因此可以通过某些脚本甚至通过更改 URL 来更改它。
现在想象有人能够更改 cookie 并更改SID为一些 JS 代码将您重定向到其他地方。如果您将在页面上打印该值而不进行转义,则每次都会重定向用户,除非他清除 cookie 或禁用 JavaScript。
换句话说,会话 ID 是从客户端获取的并且是不安全的(除非您将使用其他机制来确保它不被更改,例如 cookie 签名,包括在某些 PHP 框架中),因此您不能相信它不包含某些内容有害。
这与构造 SQL 查询时不能安全使用此值的原因相同(因此 SID 也是可能进行 SQL 注入的地方)。