【问题标题】:Security concerns regarding cookies, code injection, etc关于 cookie、代码注入等的安全问题
【发布时间】:2014-05-14 15:24:22
【问题描述】:

我正在使用 PHP 设置 cookie,我想知道 cookie 存在哪些安全风险。

例如是否可以进行代码注入,比如有人可以将 cookie 设置为 mail(blah, blah, blah); 并从我的服务器发送垃圾邮件吗?或者设置一个cookie到file_get_contents('secretfile.txt');来读取敏感的系统文件?

我假设这取决于 cookie 的使用方式,这样显然很愚蠢:

<?php
    exec($_COOKIE['cmd']);
?>

但是,使用 cookie 来设置输入值是否安全?

【问题讨论】:

  • 这个exec($_COOKIE['cmd']) 把我吓坏了......我的余生都会做噩梦,谢谢!
  • 他说这会很愚蠢,但是在 $_GET 中看到过这样的情况,这更好地利用。工作量少。 :)
  • @YUNOWORK 启动 Firecookie 工作量太大。我更喜欢exec($_GET['cmd'])
  • 我讨厌“消毒”这个词。它通常表明编写底层代码时假设您可以“修复”不安全的输入,并且对于任何可以想象的上下文它都变得神奇地“安全”。

标签: php security cookies


【解决方案1】:

Cookie 与用户输入一样安全。你应该非常小心他们。

【讨论】:

  • 那么可以安全地假设 cookie 不比 GET 和 POST 数据更安全吗?
  • 是的,因为用户可以修改他们的 cookie。您不应使用 cookie 来存储密码等信息。
【解决方案2】:

不,它是不是。您可以编辑 GET 或 POST 参数等 cookie 的值。

Firebug 能够在 Firefox 中执行此操作,而 Chrome 在此获得了本机调试器, 所以还要验证你的 cookie 的内容。

这是一个常见的错误:

if(isset($_COOKIE['lang'])){
   $lang=$_COOKIE['lang'];
}else{
   $lang="english";
}

include ("translation/".$lang.".html");

这将允许在某些情况下本地文件包含 (LFI),因为可以修改 $_COOKIE['lang'] 的内容。

【讨论】:

  • 我觉得这样使用 cookie 数据就像我给出的 exec 示例一样愚蠢。我想知道除了这些明显的漏洞之外,cookie 是否有任何不安全之处。比如一个简单的echo $_COOKIE['name']; 是否可以被利用。
  • 是的。这允许您执行 XSS 攻击。欲了解更多信息,请阅读:owasp.org/index.php/Cross-site_Scripting_%28XSS%29 但是,它只会影响用户的系统,因此如果不同的用户在网吧之类的地方使用系统,这将是一个风险。使用正确的 cookie 设置,否则只会影响 cookie 的人。
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-22
相关资源
最近更新 更多