为什么使用 cookie 通过 PHP 输出 HTML 存在安全风险


why is ouputing html through php security risk using cookie?

im对PHP来说相对较新,希望你能帮助我理解为什么你应该在"回显"时清理html,特别是如果数据来自cookie。

即代替

<h3>Hello, <?php echo $_COOKIE['user']; ?>!</h3>

你应该做

<h3>Hello, <?php echo htmlspecialchars($_COOKIE['user']); ?>!</h3>

这就是我的理解。

Cookie存储在客户端,因此存在安全风险,因为其中的数据可以被邪恶用户操纵/更改(lol @ evil)。

但是由于 cookie 存储在客户端,这意味着客户端只能更改自己的 cookie,这意味着如果他向 $_COOKIE['user'] 添加某种恶意代码,当 cookie 确实运行时,恶意代码只会显示给一个用户(谁首先更改了 cookie)而不是其他人!? 那么问题出在哪里呢?

你假设用户改变了他自己的cookie。Cookie 可以由第三方更改(编辑:使用其他软件。第三方网站不能直接更改 Cookie)。这将使某人能够将恶意代码注入用户的浏览器,从而改变他们的用户体验,并可能给您的代码带来额外的安全风险。

不仅仅是看安全方面,还有一个用户体验方面。您提供的代码对安全性并不真正有用,因为在这种情况下风险非常小,但是如果用户名可以包含引号或<>号,则用户将无法理解为什么其登录名无法正确显示。

使用这样的代码可以保证正确显示用户名(并增加额外的安全性),无论您在注册过程中允许哪种字符。

在这种情况下,

这并不是真正的风险 - 但这很少是实际情况。无论如何,你都应该这样做。

  • 一致性 - 现在不要把它放进去,当你把它改成别的东西时,你可能会打开一个安全漏洞。
  • 用户体验 - 仅仅因为cookie包含HTML并不意味着它是XSS注入尝试。如果某人的名字被&amp;怎么办?我一直在考虑将我的名字改为&amp;.

用户可以通过更改 cookie 将脚本注入您的页面。仅这一事实就足以让您停下来思考。

想象一下,

您正在创建一个真正的网站,其中许多数据存储在用户cookie中。

也许您的网站使用 cookie 中的某些数据来构建 SQL 语句,如果用户或其他网站以不好的方式修改您的 cookie,可能会导致错误。

如果您不检查 cookie 数据以进行注入,即使 cookie 中可能会写入某些内容,这可能会损害您的数据一致性,例如,varchar列中的字符串,其中只应插入十六进制数字。

处理该问题的最佳方法是尽可能使用会话,并且仅将最少量的所需数据存储在 Cookie 中。

但是由于 cookie 存储在客户端,这意味着客户端只能更改自己的 cookie,这意味着如果他向 $_COOKIE['user'] 添加某种恶意代码,当 cookie 确实运行时,恶意代码只会显示给一个用户(谁首先更改了 cookie)而不是其他人!? 那么问题出在哪里呢?

嗯,这取决于您的实现以及您使用 cookie 数据的目的。恶意用户可以通过您的 cookie 注入 SQL、更改其权限、冒充其他用户等。

这就是为什么你应该总是在编写代码时考虑最坏的情况