以PHP为例子网站开发

若某功能点代码中以$a=$_GET[‘x’]; 方式接受数据,只有提交时以GET提交才可以。

$_request[]:接收所有方式,包括get的请求和post请求

cookie存储在本地客户端的,浏览器删除记录就会消失

seesion存储在服务器的服务端,浏览器关闭就会消失,再建立就会变成新的

假如是 include ‘config.php’接收表单的账号密码

$user=$_POST[‘username’];

$paa=$_POST[‘password’];

$conn=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME); //服务端连接数据库

$sql=”select * from admin where username=’$user’ and password=’$pass’ “; //拼凑成查询语句,用户账号密码从POST获取

$data=mysqli_query($conn,$sql); //服务端登录成功后,通过sql语句去查询相关内容

if(mysqli_num_rows($data)>0){ //若成功查询,则会有行数,即大于0,若查询失败则为空值

echo “<script>alert(‘成功’)”;

header(‘Location:index.php’); //跳转相应的网页

exit();}


以index.php为例子,很多页面需要登录才能访问,若每一页的代码中都需要连接数据库验证,则会极大程度消耗资源,因此引申出的未授权问题以及cookie的使用:



$data=mysqli_query($conn,$sql);  //服务端登录成功后,通过sql语句去查询相关内容

if(mysqli_num_rows($data)>0){    //若成功查询,则会有行数,即大于0,若查询失败则为空值
$expire = time() + 60*60*24*30;//一个月过期
setcookie('username',$md5($user),$expire.'/');
setcookie('password',$md5($pass),$expire.'/');
echo "<script>alert('成功')"; 

header('Location:index.php');  //跳转相应的网页

exit();}

上述代码绿色部分为使用cookie,于是,需要授权的页面验证cookie值就可以了,如下:

if ($_COOKIE[‘username’]==’xx’ and $_COOKIE[‘password’]==’xx’){
} //服务器服务端验证cookie

cookie是凭据,除非删除或者设置为空,不会消失。仅通过cookie鉴定权限存在极大安全隐患,因此使用seesion

session:

是用session的情况下,浏览器的cookie部分信息显示如下图:

session保存在服务器的服务端,更加安全。


在存在登录功能的页面通常攻击者采用暴力破解的方式猜解密码

<?php // 启动会话 session_start(); // 检查会话中是否已经存在 ‘token’,如果没有则创建一个新的令牌 if (!isset($_SESSION[‘token’])) { $_SESSION[‘token’] = bin2hex(random_bytes(32)); // 生成一个安全的随机令牌 } // 现在可以在会话中访问 $_SESSION[‘token’] ?>

使用 token 防止暴力破解、重放攻击是一种常见的安全措施,它主要通过以下步骤来实现:

  1. 生成 Token: 在用户进行登录或其他敏感操作之前,服务器会生成一个唯一的 token,并将其存储在服务器的会话或数据库中,同时将 token 发送到客户端(通常是浏览器)通过“检查”可以看到token。
  2. 验证 Token: 当用户提交登录请求时,服务器会要求客户端发送之前生成的 token。服务器会对比客户端发送的 token 与存储在服务器端的 token 是否一致。这是关键,使用bp重发器进行暴力破解,每发一次包服务端都会更新token。若手动则可以正常爆破,因为手动爆破下浏览器每次的token也会跟着改变。