【PHP】CSRF是什么—–对策
跨站请求伪造
跨站请求伪造(CSRF)是一种恶意攻击方式,它利用已认证的用户的身份来执行非意愿的操作。
跨站请求伪造(Cross-Site Request Forgery)是一种利用Web应用程序的漏洞或利用该漏洞进行攻击的方式。缩写为CSRF(也可以读作“sea-surf”)或者XSRF。它也被称为请求强制,会话劫持(session riding)。
CSRF脆弱性是指以下攻击(CSRF攻击)使得攻击者能够利用的漏洞:
– 攻击者欺骗浏览器或其他用户客户端,发送未经用户意图的请求(例如HTTP请求)给Web服务器。
– 如果Web应用程序设计上没有充分验证来自用户客户端的请求,则会将这个请求误以为是合法请求,从而造成损害。
– CSRF攻击可以利用URL、图片加载、XMLHttpRequest等方式进行执行。
解决办法
以下是一个方法介绍:将表单的隐藏值通过密码学函数进行处理。
关键词
・openssl_random_pseudo_bytes
生成一个伪随机字节字符串
・bin2hex
将二进制数据转换为十六进制表示
网络发送和接收安全措施
//安全安心なトークンを作成(32桁数)
$TOKEN_LENGTH = 16;
$tokenByte = openssl_random_pseudo_bytes($TOKEN_LENGTH);
$csrfToken = bin2hex($tokenByte);
//セッションに設定
$_SESSION['csrfToken'] = $csrfToken;
//formのhidden値に設定
<input type='hidden' name='csrf' value='{$csrfToken}'>
if ($_POST['csrfToken'] === $_SESSION['csrfToken']) {
//正常処理
} else {
//CSRF攻撃が発生
}
参考:
・CSRF定义(WiKi)
・攻击的方法和特征
・请求强制(CSRF)对策
—我喜欢PHP (。・ω・。)ノ♡