Rumah  >  Soal Jawab  >  teks badan

php - 如何防止cookie伪造?

我用的php,初学者的做法一般就是
这样设置

setcookie('username','xxx',time()+3600*24);
setcookie('password','xxx',time()+3600*24);

再这样读取

$logged = false;
$username = @$_COOKIE['username'];
$password = @$_COOKIE['password'];
if(isset($username)&&isset($password)){
    $logged=true;
    $user = getUser($username,$password);
}

这种做法的话用户名和密码就都是明文保存在本地的,不安全对吧。
那我可以加密后再保存到cookie里,登陆的时候再在后台程序里解密,加解密的方法只有我自己知道。
这样是可以避免用户名密码泄露,但是要通过cookie伪造登陆应该还是很方便。
我想知道后者一般是如何避免的?谢谢大家啦

黄舟黄舟2771 hari yang lalu796

membalas semua(4)saya akan balas

  • 阿神

    阿神2017-04-10 13:10:48

    你说的这种方法是最原始的方法,一般说来仅供学习cookie原理时使用,在实际的开发中一般是不会把密码这种敏感信息直接以明文方式存放在cookie中的。

    现在更通用的做法是使用session来标识用户,也就是说我们为每个客户端生成一个唯一的id,然后在服务端存储这个id所对应的状态。

    这样cookie里面仅仅保存了这个id,而没有任何其他的东西。而且这个id往往还有个特性,它是随机生成,且每次登陆都会产生一个新的。这样就更降低了信息泄漏的风险。

    在php里你可以使用以下代码来启用和调用session保存的值,因为它们都是保存在服务器端,所以是安全的。

    session_start();
    
    $_SESSION['username'] = 'xxx';
    $_SESSION['password'] = 'xxx';
    
    var_dump($_SESSION);

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 13:10:48

    现在所有在http协议中的登陆都依赖于cookie,或者某个参数。这样的话,你要保证的是cookie只有你能验证合法性,但不能解决cookie被盗引起的问题,当然你可以在cookie中把ip信息加密进去。但是这样也会有一些问题,比如某些客服端的ip是经常变换的。

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 13:10:48

    可以在本地保存加密的版本。md5什么的。

    balas
    0
  • PHP中文网

    PHP中文网2017-04-10 13:10:48

    没用的,你无法解决cookie被盗取的问题,我们是用local storage来弄这个问题的,也是用一个类似cookie的东西,但是每次跟服务器的数据交换都会修改这个值,来加强安全性。

    balas
    0
  • Batalbalas