网络安全编程——PHP基础Cookie详细讲解

今天开始,PHP基础这类型的文章主要是为了我之后学习代码审计打基础,先了解最基本的代码以及函数用法;

文章目录


cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,能够创建并取回 cookie 的值。


举个例子:比如大家逛某宝,某东的时候,是不是都先登录然后再去加入购物车?那么网站又是如何正确加入到"你的购物车"呢?

答案:就是通过Cookie或者session;


如何创建 Cookie?

setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

比如,创建名为 "user" 的 cookie,并为它赋值 "hacker"。我们也规定了此 cookie 在一小时后过期

php 复制代码
<?php
# 设置了一个cookie,并且一小时后过期
setcookie("user", "hacker", time()+3600);
?>

<html>
	各种前端代码...
<\html>

PHP 的 $_COOKIE 变量用于取回 cookie 的值。

php 复制代码
<?php
// 输出 cookie 值
echo $_COOKIE["user"];

// 查看所有 cookie
print_r($_COOKIE);
?>

上述两段代码,结果如下:

好了大家已经熟练掌握Cookie的知识,举个简单例子深入了解一下;

举例Cookie的作用

本例我将简单生成一个前后端:

  • 前端输入账号密码
    • 如果输入正确,跳转到login.php页面;
    • 如果输入失败,跳转回index.php 页面并alert弹窗提醒;
  • 后端进行校验:
    • 如果输入符合特定的Cookie,将其跳转到login.php页面;
    • 否则显示"权限不足,无法访问"

(1)index.php代码:
php 复制代码
<?php
# 如果获取到表单提交的数据
if($_POST['sub']){
    $username = $_POST['username'];
    $password = $_POST['password'];

    if ($username == "admin" and $password ==  "admin123"){
        # "/"表示当前页面所有子目录,都是用同一个Cookie
        setcookie("username",$username,time()+3600,"/"); // 形成数组 username[admin]
        header("location:login.php");
    }
    else{
        echo "<script>alert(\"账号或密码错误\")</script>";

    }
}

?>

<html>
<form method="post" enctype="application/x-www-form-urlencoded">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    <input type="submit" value="submit" name="sub">
</form>

</html>
(2)login.php代码
php 复制代码
<?php
if($_COOKIE['username'] == 'admin'){
    echo "欢迎{$_COOKIE['username']}登陆系统<br>";
    echo "<a href='login.php?c=logout'>退出</a>";
}else{
    echo "当前用户无权限访问";
}

if($_GET['c'] == 'logout'){
    setcookie("username","",time()-3600,"/"); // 清除Cookie
    header("location:index.php");
}


?>

(3)这里我们随机输入密码,发现错误:

(4)直接访问login.php页面,权限不足:

(5)随后输入正确密码,成功登陆系统:

并且可以看到我们设置的Cookie:

漏洞点

因为Cookie没有做任何防护,所以我们可以BP抓包手动修改,进而进入系统:

(这里我们直接访问login页面,失败)

如果添加Cookie: username=admin:,直接成功:

总结

下一篇讲session,期待下次再见;

相关推荐
噢,我明白了3 小时前
java中唯一键和幂等键的应用
java·后端
GreenTea3 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑3 小时前
synchronized字符串常量
java·后端·java ee
小蒋观天下3 小时前
两轮车检测AI摄像头——2026行业竞争格局、商业模式与核心痛点
大数据·人工智能·安全·计算机视觉·ai大模型
颜进强4 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
GetcharZp4 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端
lie..4 小时前
30天从零开始学AI应用开发(Day 12):像产品一样稳:流式输出、报错重试、花钱控制
开发语言·人工智能·php
小蒋观天下5 小时前
两轮车检测AI摄像头——2026-2030年未来市场规模、增长逻辑与行业天花板
大数据·人工智能·安全·计算机视觉·ai大模型
郑州光合科技余经理5 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程
我叫黑大帅6 小时前
Go日志库工程选型与逃逸分析评测报告
后端·面试·go