4

我对php比较陌生,希望你能帮助我理解为什么你应该在'echo'ing时清理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)而不是其他任何人!?所以有什么问题?

4

6 回答 6

7

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

于 2012-06-05T14:51:45.700 回答
3

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

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

于 2012-06-05T14:57:14.077 回答
2

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

  • 一致性——现在不要放,当你把它改成别的东西时,你可能会打开一个安全漏洞。
  • 用户体验——仅仅因为 cookie 包含 HTML 并不意味着它是 XSS 注入尝试。如果有人的名字是&amp;怎么办?我一直在想把我的名字改成&amp;.
于 2012-06-05T14:52:56.897 回答
-1

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

于 2012-06-05T14:52:19.647 回答
-1

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

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

如果您不检查 cookie 数据是否有注入,即使在 cookie 中写入的内容可能会损害您的数据一致性,例如,varchar列中的字符串只能插入十六进制数字。

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

于 2012-06-05T14:58:37.710 回答
-2

但是由于 cookie 存储在客户端,这意味着客户端只能更改自己的 cookie,这意味着如果他在 $_COOKIE['user'] 中添加某种恶意代码,当 cookie 运行时,恶意代码将只显示给一个用户(谁首先更改了 cookie)而不是其他任何人!?所以有什么问题?

好吧,这取决于您的实施以及您使用 cookie 数据的目的。一个邪恶的用户可以通过你的 cookie 注入 SQL,改变他的权限,冒充另一个用户,等等。

这就是为什么您应该始终考虑最坏情况的编码

于 2012-06-05T14:52:43.157 回答